Submission #697205

#TimeUsernameProblemLanguageResultExecution timeMemory
697205allllekssssaBomb (IZhO17_bomb)C++14
15 / 100
1102 ms80972 KiB
#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'; } } 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; for (int i = 1; i <=n; i++) { int lo = 0; int ro = m + 1; while(lo < ro - 1) { int mid = lo + ro >> 1; if (check(i, mid)) lo = mid; else ro = mid; } ans = max(ans, i * lo); } cout << ans << endl; }

Compilation message (stderr)

bomb.cpp: In function 'int main()':
bomb.cpp:114:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  114 |    int mid = lo + ro >> 1;
      |              ~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...