Submission #907304

#TimeUsernameProblemLanguageResultExecution timeMemory
907304daoquanglinh2007Bomb (IZhO17_bomb)C++17
51 / 100
982 ms55892 KiB
#include <bits/stdc++.h> using namespace std; const int NM = 2500, inf = 1e9+7; int N, M, f[NM+5][NM+5], dp[NM+5][NM+5], ans = 0, H = +inf, W = +inf; char a[NM+5][NM+5]; int getf(int x, int y, int u, int v){ return f[u][v]-f[x-1][v]-f[u][y-1]+f[x-1][y-1]; } bool check(int r, int c){ for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++) dp[i][j] = 0; for (int i = 1; i+r-1 <= N; i++) for (int j = 1; j+c-1 <= M; j++) if (getf(i, j, i+r-1, j+c-1) == r*c){ dp[i][j]++; dp[i+r][j]--; dp[i][j+c]--; dp[i+r][j+c]++; } for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++){ dp[i][j] += dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]; if (dp[i][j] == 0 && a[i][j] == '1') return 0; } return 1; } void preprocess(){ for (int j = 1; j <= M; j++) for (int i = 1; i <= N; i++){ if (a[i][j] == '0') continue; int k = i; while (k <= N && a[k][j] == '1') k++; H = min(H, k-i); i = k-1; } for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++){ if (a[i][j] == '0') continue; int k = j; while (k <= M && a[i][k] == '1') k++; W = min(W, k-j); j = k-1; } } int main(){ // freopen("BOMB.inp", "r", stdin); // freopen("BOMB.ans", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M; for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++){ cin >> a[i][j]; if (a[i][j] == '1') f[i][j] = 1; } preprocess(); for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++) f[i][j] += f[i][j-1]+f[i-1][j]-f[i-1][j-1]; int j = W; for (int i = 1; i <= H; i++){ while (j >= 0 && !check(i, j)){ if ((double)clock()/CLOCKS_PER_SEC > 0.95) break; j--; } if ((double)clock()/CLOCKS_PER_SEC > 0.95) break; ans = max(ans, i*j); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...