Submission #697209

# Submission time Handle Problem Language Result Execution time Memory
697209 2023-02-08T21:50:00 Z allllekssssa Bomb (IZhO17_bomb) C++14
51 / 100
952 ms 25892 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 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);
	}

	return minW * minH;
}

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 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 >= 500 || m >= 500) {
		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 Correct 4 ms 10324 KB Output is correct
4 Correct 4 ms 10324 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 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 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 1 ms 468 KB Output is correct
17 Correct 3 ms 1108 KB Output is correct
18 Correct 2 ms 1108 KB Output is correct
19 Correct 5 ms 1492 KB Output is correct
20 Correct 6 ms 1492 KB Output is correct
21 Correct 4 ms 980 KB Output is correct
22 Correct 5 ms 1308 KB Output is correct
23 Correct 9 ms 1620 KB Output is correct
24 Correct 4 ms 1364 KB Output is correct
25 Correct 10 ms 1620 KB Output is correct
26 Correct 8 ms 1620 KB Output is correct
27 Correct 131 ms 4768 KB Output is correct
28 Correct 266 ms 5080 KB Output is correct
29 Correct 347 ms 6444 KB Output is correct
30 Correct 666 ms 7748 KB Output is correct
31 Correct 502 ms 6080 KB Output is correct
32 Correct 486 ms 7004 KB Output is correct
33 Correct 825 ms 8140 KB Output is correct
34 Correct 125 ms 5460 KB Output is correct
35 Correct 580 ms 8020 KB Output is correct
36 Correct 678 ms 8092 KB Output is correct
37 Correct 0 ms 468 KB Output is correct
38 Correct 171 ms 25736 KB Output is correct
39 Correct 0 ms 468 KB Output is correct
40 Incorrect 21 ms 6716 KB Output isn't correct
41 Correct 1 ms 468 KB Output is correct
42 Correct 12 ms 1636 KB Output is correct
43 Correct 178 ms 25804 KB Output is correct
44 Correct 952 ms 8092 KB Output is correct
45 Incorrect 171 ms 25676 KB Output isn't correct
46 Correct 173 ms 25720 KB Output is correct
47 Incorrect 181 ms 25736 KB Output isn't correct
48 Incorrect 175 ms 25768 KB Output isn't correct
49 Correct 171 ms 25728 KB Output is correct
50 Incorrect 173 ms 25652 KB Output isn't correct
51 Incorrect 174 ms 25752 KB Output isn't correct
52 Incorrect 174 ms 25696 KB Output isn't correct
53 Incorrect 186 ms 25676 KB Output isn't correct
54 Incorrect 178 ms 25660 KB Output isn't correct
55 Incorrect 180 ms 25676 KB Output isn't correct
56 Correct 177 ms 25736 KB Output is correct
57 Incorrect 174 ms 25736 KB Output isn't correct
58 Incorrect 176 ms 25736 KB Output isn't correct
59 Incorrect 177 ms 25636 KB Output isn't correct
60 Correct 175 ms 25704 KB Output is correct
61 Correct 178 ms 25748 KB Output is correct
62 Correct 176 ms 25796 KB Output is correct
63 Correct 172 ms 25708 KB Output is correct
64 Correct 176 ms 25620 KB Output is correct
65 Incorrect 176 ms 25892 KB Output isn't correct
66 Incorrect 175 ms 25736 KB Output isn't correct
67 Incorrect 174 ms 25624 KB Output isn't correct
68 Incorrect 174 ms 25676 KB Output isn't correct
69 Incorrect 173 ms 25620 KB Output isn't correct
70 Incorrect 113 ms 20532 KB Output isn't correct
71 Incorrect 172 ms 25652 KB Output isn't correct
72 Incorrect 177 ms 25804 KB Output isn't correct
73 Incorrect 174 ms 25700 KB Output isn't correct
74 Incorrect 174 ms 25616 KB Output isn't correct
75 Incorrect 175 ms 25652 KB Output isn't correct
76 Incorrect 181 ms 25676 KB Output isn't correct
77 Incorrect 175 ms 25676 KB Output isn't correct
78 Incorrect 176 ms 25676 KB Output isn't correct
79 Incorrect 178 ms 25752 KB Output isn't correct
80 Incorrect 175 ms 25656 KB Output isn't correct
81 Incorrect 182 ms 25744 KB Output isn't correct
82 Incorrect 174 ms 25680 KB Output isn't correct
83 Incorrect 178 ms 25672 KB Output isn't correct
84 Incorrect 176 ms 25720 KB Output isn't correct
85 Incorrect 172 ms 25736 KB Output isn't correct
86 Incorrect 175 ms 25668 KB Output isn't correct
87 Incorrect 178 ms 25816 KB Output isn't correct
88 Incorrect 173 ms 25680 KB Output isn't correct
89 Incorrect 172 ms 25648 KB Output isn't correct
90 Incorrect 113 ms 20632 KB Output isn't correct
91 Incorrect 175 ms 25696 KB Output isn't correct
92 Incorrect 170 ms 25676 KB Output isn't correct
93 Incorrect 173 ms 25680 KB Output isn't correct
94 Incorrect 178 ms 25768 KB Output isn't correct
95 Incorrect 174 ms 25736 KB Output isn't correct
96 Incorrect 177 ms 25680 KB Output isn't correct
97 Incorrect 175 ms 25676 KB Output isn't correct
98 Incorrect 175 ms 25864 KB Output isn't correct
99 Incorrect 176 ms 25724 KB Output isn't correct
100 Incorrect 171 ms 25676 KB Output isn't correct