Submission #697231

# Submission time Handle Problem Language Result Execution time Memory
697231 2023-02-09T00:09:32 Z allllekssssa Bomb (IZhO17_bomb) C++14
37 / 100
1000 ms 51420 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(2, minW); i++) {
		for (int j = 0; j<min(2, 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';
		}
	}
 
	if (n >= 1000 || m >= 1000) {
		cout << heuristic() << endl;
		return 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];
		}
	}
   
    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 0 ms 212 KB Output is correct
2 Correct 0 ms 468 KB Output is correct
3 Incorrect 14 ms 20436 KB Output isn't correct
4 Incorrect 10 ms 20404 KB Output isn't correct
5 Incorrect 1 ms 340 KB Output isn't correct
6 Incorrect 1 ms 340 KB Output isn't correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 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 0 ms 468 KB Output is correct
13 Correct 0 ms 468 KB Output is correct
14 Correct 1 ms 468 KB Output is correct
15 Correct 1 ms 468 KB Output is correct
16 Correct 0 ms 468 KB Output is correct
17 Correct 3 ms 1108 KB Output is correct
18 Correct 3 ms 1108 KB Output is correct
19 Correct 7 ms 1492 KB Output is correct
20 Correct 6 ms 1492 KB Output is correct
21 Correct 4 ms 932 KB Output is correct
22 Correct 5 ms 1308 KB Output is correct
23 Correct 12 ms 1620 KB Output is correct
24 Correct 5 ms 1364 KB Output is correct
25 Correct 9 ms 1620 KB Output is correct
26 Correct 8 ms 1620 KB Output is correct
27 Correct 125 ms 4692 KB Output is correct
28 Correct 251 ms 5076 KB Output is correct
29 Correct 349 ms 6448 KB Output is correct
30 Correct 623 ms 7660 KB Output is correct
31 Correct 501 ms 6088 KB Output is correct
32 Correct 486 ms 6996 KB Output is correct
33 Correct 747 ms 8084 KB Output is correct
34 Correct 128 ms 5532 KB Output is correct
35 Correct 543 ms 8080 KB Output is correct
36 Correct 723 ms 8100 KB Output is correct
37 Correct 0 ms 468 KB Output is correct
38 Incorrect 338 ms 51184 KB Output isn't correct
39 Correct 1 ms 468 KB Output is correct
40 Execution timed out 1095 ms 19780 KB Time limit exceeded
41 Correct 1 ms 468 KB Output is correct
42 Correct 13 ms 1632 KB Output is correct
43 Incorrect 336 ms 51180 KB Output isn't correct
44 Correct 950 ms 8084 KB Output is correct
45 Incorrect 337 ms 51236 KB Output isn't correct
46 Incorrect 336 ms 51232 KB Output isn't correct
47 Incorrect 338 ms 51228 KB Output isn't correct
48 Incorrect 353 ms 51184 KB Output isn't correct
49 Incorrect 355 ms 51148 KB Output isn't correct
50 Incorrect 350 ms 51148 KB Output isn't correct
51 Incorrect 341 ms 51228 KB Output isn't correct
52 Incorrect 344 ms 51128 KB Output isn't correct
53 Incorrect 361 ms 51368 KB Output isn't correct
54 Incorrect 338 ms 51148 KB Output isn't correct
55 Incorrect 346 ms 51228 KB Output isn't correct
56 Incorrect 332 ms 51184 KB Output isn't correct
57 Incorrect 346 ms 51284 KB Output isn't correct
58 Incorrect 348 ms 51184 KB Output isn't correct
59 Incorrect 340 ms 51224 KB Output isn't correct
60 Incorrect 348 ms 51156 KB Output isn't correct
61 Incorrect 338 ms 51228 KB Output isn't correct
62 Incorrect 343 ms 51240 KB Output isn't correct
63 Incorrect 330 ms 51228 KB Output isn't correct
64 Incorrect 354 ms 51236 KB Output isn't correct
65 Incorrect 354 ms 51196 KB Output isn't correct
66 Incorrect 334 ms 51152 KB Output isn't correct
67 Incorrect 337 ms 51152 KB Output isn't correct
68 Incorrect 340 ms 51232 KB Output isn't correct
69 Incorrect 347 ms 51224 KB Output isn't correct
70 Incorrect 225 ms 41036 KB Output isn't correct
71 Incorrect 351 ms 51324 KB Output isn't correct
72 Incorrect 341 ms 51240 KB Output isn't correct
73 Incorrect 339 ms 51208 KB Output isn't correct
74 Incorrect 356 ms 51228 KB Output isn't correct
75 Incorrect 346 ms 51232 KB Output isn't correct
76 Incorrect 356 ms 51180 KB Output isn't correct
77 Incorrect 342 ms 51232 KB Output isn't correct
78 Incorrect 349 ms 51276 KB Output isn't correct
79 Incorrect 357 ms 51208 KB Output isn't correct
80 Incorrect 368 ms 51148 KB Output isn't correct
81 Incorrect 336 ms 51192 KB Output isn't correct
82 Incorrect 348 ms 51420 KB Output isn't correct
83 Incorrect 346 ms 51228 KB Output isn't correct
84 Incorrect 356 ms 51324 KB Output isn't correct
85 Incorrect 343 ms 51120 KB Output isn't correct
86 Incorrect 337 ms 51148 KB Output isn't correct
87 Incorrect 341 ms 51148 KB Output isn't correct
88 Incorrect 342 ms 51172 KB Output isn't correct
89 Incorrect 343 ms 51296 KB Output isn't correct
90 Incorrect 224 ms 41024 KB Output isn't correct
91 Incorrect 342 ms 51272 KB Output isn't correct
92 Incorrect 342 ms 51208 KB Output isn't correct
93 Incorrect 376 ms 51324 KB Output isn't correct
94 Incorrect 343 ms 51232 KB Output isn't correct
95 Incorrect 368 ms 51228 KB Output isn't correct
96 Incorrect 341 ms 51336 KB Output isn't correct
97 Incorrect 355 ms 51216 KB Output isn't correct
98 Incorrect 340 ms 51252 KB Output isn't correct
99 Incorrect 337 ms 51236 KB Output isn't correct
100 Incorrect 342 ms 51352 KB Output isn't correct