Submission #697235

# Submission time Handle Problem Language Result Execution time Memory
697235 2023-02-09T00:14:04 Z allllekssssa Bomb (IZhO17_bomb) C++14
51 / 100
1000 ms 77284 KB
#include<bits/stdc++.h>
 
using namespace std;
 
const int maxN = 2600;
int n, m;
int a[maxN][maxN];
int d[maxN][maxN];
int c[maxN][maxN];
string s;
 
int getDSum(int x1, int y1, int x2, int y2) {
	if (x2 > n || y2 > m) return 0;
	return d[x2][y2] + d[x1 - 1][y1 - 1] - d[x1 - 1][y2] - d[x2][y1 - 1];
}
 
int getCSum(int x1, int y1, int x2, int y2) {
	x1 = max(x1, 1);
	y1 = max(y1, 1);
	return c[x2][y2] + c[x1 - 1][y1 - 1] - c[x1 - 1][y2] - c[x2][y1 - 1];
}
 
bool check(int x, int y) {
 
	for (int i = 1; i<=n; i++) {
		for (int j = 1; j<=m; j++) {
			c[i][j] = 0;
		}
	}
   
   for (int i = 1; i<=n; i++) {
   	 for (int j = 1; j<=m; j++) {
   	 	if (getDSum(i, j, i + x - 1, j + y - 1) == x * y) c[i][j] = 1;
   	 }
   }
 
   for (int i = 1; i <= n; i++) {
		for (int j = 1; j<=m; j++) {
			c[i][j] += c[i - 1][j] + c[i][j - 1] - c[i - 1][j - 1];
		}
	}
 
   for (int i = 1; i<=n; i++) {
   	for (int j = 1; j <= m; j++) {
 		  if (a[i][j] && getCSum(i - x + 1, j - y + 1, i, j) == 0) return false;
   	  }
   }
 
   return true;
}
 
int heuristic() {
  
   int minW = n;
   int minH = m;

	for (int i = 1; i<=n; i++) {
		int cur = 0;
		for (int j = 1; j<=m; j++) {
			if (a[i][j] == 1) cur++; else {
				if (cur > 0) {
					minH = min(minH, cur);
					cur = 0;
				}
			}
		}

	   if (cur > 0) minH = min(minH, cur);
	}

	for (int j = 1; j<=m; j++) {
		int cur = 0;
		for (int i = 1; i<=n; i++) {
			if (a[i][j] == 1) cur++; else {
				if (cur > 0) {
					minW = min(minW, cur);
					cur = 0;
				}
			}
		}

		if (cur > 0) minW = min(minW, cur);
	}
    
    int ans = 0;
	for (int i = 0; i< min(3, minW); i++) {
		for (int j = 0; j<min(3, minH); j++) {
           if (check(minW - i, minH -j)) ans = max(ans, (minW - i) * (minH -j));
		}
	}
	return ans;
}

int main() {
 
	cin >> n >> m;
 
	for (int i = 1; i <=n; i++) {
		cin >> s;
 
		for (int j = 0; j < m; j++) {
			a[i][j + 1] = s[j] - '0';
		}
	}
    
    for (int i = 1; i <= n; i++) {
		for (int j = 1; j<=m; j++) {
			d[i][j] = d[i - 1][j] + d[i][j - 1] + a[i][j] - d[i - 1][j - 1];
		}
	}

	if (n * m  * (n + m) >= 3e8) {
		cout << heuristic() << endl;
		return 0;
	}

   
    int ans = 0;
    
    int width = m;
	for (int i = 1; i <=n; i++) {
 
		while (width > 0 && !check(i, width)) width--;
 
		ans = max(ans, i * width);
	}
    
    cout << ans << endl;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 560 KB Output is correct
3 Correct 19 ms 30440 KB Output is correct
4 Correct 19 ms 30440 KB Output is correct
5 Correct 35 ms 340 KB Output is correct
6 Correct 6 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 1 ms 468 KB Output is correct
9 Correct 1 ms 468 KB Output is correct
10 Correct 0 ms 468 KB Output is correct
11 Correct 1 ms 468 KB Output is correct
12 Correct 1 ms 468 KB Output is correct
13 Correct 1 ms 432 KB Output is correct
14 Correct 1 ms 468 KB Output is correct
15 Correct 1 ms 436 KB Output is correct
16 Correct 1 ms 564 KB Output is correct
17 Correct 3 ms 1108 KB Output is correct
18 Correct 3 ms 1204 KB Output is correct
19 Correct 6 ms 1492 KB Output is correct
20 Correct 7 ms 1460 KB Output is correct
21 Correct 5 ms 980 KB Output is correct
22 Correct 5 ms 1236 KB Output is correct
23 Correct 9 ms 1644 KB Output is correct
24 Correct 5 ms 1372 KB Output is correct
25 Correct 10 ms 1644 KB Output is correct
26 Correct 8 ms 1640 KB Output is correct
27 Correct 126 ms 4848 KB Output is correct
28 Correct 256 ms 5180 KB Output is correct
29 Correct 332 ms 6572 KB Output is correct
30 Correct 631 ms 7816 KB Output is correct
31 Correct 484 ms 6208 KB Output is correct
32 Correct 505 ms 7116 KB Output is correct
33 Correct 772 ms 8216 KB Output is correct
34 Correct 119 ms 5604 KB Output is correct
35 Correct 584 ms 8168 KB Output is correct
36 Correct 686 ms 8208 KB Output is correct
37 Correct 1 ms 468 KB Output is correct
38 Correct 711 ms 77268 KB Output is correct
39 Correct 1 ms 468 KB Output is correct
40 Incorrect 78 ms 20120 KB Output isn't correct
41 Correct 1 ms 468 KB Output is correct
42 Correct 11 ms 1648 KB Output is correct
43 Correct 738 ms 77176 KB Output is correct
44 Correct 955 ms 8216 KB Output is correct
45 Incorrect 558 ms 77268 KB Output isn't correct
46 Correct 692 ms 77264 KB Output is correct
47 Incorrect 569 ms 77276 KB Output isn't correct
48 Incorrect 580 ms 77240 KB Output isn't correct
49 Correct 749 ms 77264 KB Output is correct
50 Incorrect 607 ms 77168 KB Output isn't correct
51 Incorrect 592 ms 77264 KB Output isn't correct
52 Incorrect 576 ms 77272 KB Output isn't correct
53 Incorrect 590 ms 77228 KB Output isn't correct
54 Incorrect 605 ms 77284 KB Output isn't correct
55 Incorrect 651 ms 77264 KB Output isn't correct
56 Correct 712 ms 77276 KB Output is correct
57 Incorrect 636 ms 77048 KB Output isn't correct
58 Incorrect 699 ms 77244 KB Output isn't correct
59 Incorrect 636 ms 77044 KB Output isn't correct
60 Correct 697 ms 77136 KB Output is correct
61 Correct 776 ms 77136 KB Output is correct
62 Correct 762 ms 76624 KB Output is correct
63 Correct 721 ms 76700 KB Output is correct
64 Correct 647 ms 76668 KB Output is correct
65 Incorrect 580 ms 76620 KB Output isn't correct
66 Incorrect 583 ms 76624 KB Output isn't correct
67 Incorrect 597 ms 76620 KB Output isn't correct
68 Incorrect 573 ms 76636 KB Output isn't correct
69 Incorrect 781 ms 76628 KB Output isn't correct
70 Execution timed out 1085 ms 61332 KB Time limit exceeded
71 Incorrect 623 ms 76628 KB Output isn't correct
72 Incorrect 583 ms 76632 KB Output isn't correct
73 Incorrect 562 ms 76620 KB Output isn't correct
74 Incorrect 622 ms 76628 KB Output isn't correct
75 Incorrect 574 ms 76732 KB Output isn't correct
76 Incorrect 583 ms 76652 KB Output isn't correct
77 Incorrect 644 ms 76624 KB Output isn't correct
78 Incorrect 587 ms 76632 KB Output isn't correct
79 Incorrect 608 ms 76552 KB Output isn't correct
80 Incorrect 670 ms 76624 KB Output isn't correct
81 Incorrect 573 ms 76624 KB Output isn't correct
82 Incorrect 577 ms 76624 KB Output isn't correct
83 Incorrect 579 ms 76748 KB Output isn't correct
84 Incorrect 573 ms 76744 KB Output isn't correct
85 Incorrect 566 ms 76620 KB Output isn't correct
86 Incorrect 571 ms 76588 KB Output isn't correct
87 Incorrect 569 ms 76588 KB Output isn't correct
88 Incorrect 553 ms 76628 KB Output isn't correct
89 Incorrect 573 ms 76664 KB Output isn't correct
90 Execution timed out 1100 ms 61260 KB Time limit exceeded
91 Incorrect 589 ms 76704 KB Output isn't correct
92 Incorrect 569 ms 76740 KB Output isn't correct
93 Incorrect 575 ms 76556 KB Output isn't correct
94 Incorrect 574 ms 76628 KB Output isn't correct
95 Incorrect 580 ms 76632 KB Output isn't correct
96 Incorrect 557 ms 76632 KB Output isn't correct
97 Incorrect 574 ms 76624 KB Output isn't correct
98 Incorrect 575 ms 76712 KB Output isn't correct
99 Incorrect 583 ms 76612 KB Output isn't correct
100 Incorrect 580 ms 76628 KB Output isn't correct