Submission #768228

#TimeUsernameProblemLanguageResultExecution timeMemory
768228rainboyBomb (IZhO17_bomb)C11
100 / 100
426 ms110540 KiB
#include <stdio.h> #define N 2500 #define M 2500 int min(int a, int b) { return a < b ? a : b; } int max(int a, int b) { return a > b ? a : b; } int main() { static char cc[N][M + 1]; static int ll[N][M], rr[N][M], uu[N][M], dd[N][M], yy[N + 1]; int n, m, i, i_, j, j_, l, r, u, d, x, y, ans; scanf("%d%d", &n, &m); for (i = 0; i < n; i++) scanf("%s", cc[i]); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) ll[i][j] = cc[i][j] == '0' ? j + 1 : (j == 0 ? 0 : ll[i][j - 1]); for (j = m - 1; j >= 0; j--) rr[i][j] = cc[i][j] == '0' ? j - 1 : (j + 1 == m ? m - 1 : rr[i][j + 1]); } for (j = 0; j < m; j++) { for (i = 0; i < n; i++) uu[i][j] = cc[i][j] == '0' ? i + 1 : (i == 0 ? 0 : uu[i - 1][j]); for (i = n - 1; i >= 0; i--) dd[i][j] = cc[i][j] == '0' ? i - 1 : (i + 1 == n ? n - 1 : dd[i + 1][j]); } for (x = 1; x <= n; x++) yy[x] = m; for (i = 0; i < n; i++) for (j = 0; j < m; j++) { if (ll[i][j] == j) { j_ = j, u = 0, d = n - 1; while (j_ <= rr[i][j]) { u = max(u, uu[i][j_]), d = min(d, dd[i][j_]); x = d - u + 1, y = j_ - j; if (x < n) yy[x + 1] = min(yy[x + 1], y); j_++; } x = 0, y = j_ - j; if (x < n) yy[x + 1] = min(yy[x + 1], y); } if (rr[i][j] == j) { j_ = j, u = 0, d = n - 1; while (j_ >= ll[i][j]) { u = max(u, uu[i][j_]), d = min(d, dd[i][j_]); x = d - u + 1, y = j - j_; if (x < n) yy[x + 1] = min(yy[x + 1], y); j_--; } x = 0, y = j - j_; if (x < n) yy[x + 1] = min(yy[x + 1], y); } if (uu[i][j] == i) { i_ = i, l = 0, r = m - 1; while (i_ <= dd[i][j]) { l = max(l, ll[i_][j]), r = max(r, rr[i_][j]); x = i_ - i, y = r - l + 1; if (x < n) yy[x + 1] = min(yy[x + 1], y); i_++; } x = i_ - i, y = 0; if (x < n) yy[x + 1] = min(yy[x + 1], y); } if (dd[i][j] == i) { i_ = i, l = 0, r = m - 1; while (i_ >= uu[i][j]) { l = max(l, ll[i_][j]), r = max(r, rr[i_][j]); x = i - i_, y = r - l + 1; if (x < n) yy[x + 1] = min(yy[x + 1], y); i_--; } x = i - i_, y = 0; if (x < n) yy[x + 1] = min(yy[x + 1], y); } } y = m, ans = 0; for (x = 1; x <= n; x++) { y = min(y, yy[x]); ans = max(ans, x * y); } printf("%d\n", ans); return 0; }

Compilation message (stderr)

bomb.c: In function 'main':
bomb.c:14:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |  scanf("%d%d", &n, &m);
      |  ^~~~~~~~~~~~~~~~~~~~~
bomb.c:16:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |   scanf("%s", cc[i]);
      |   ^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...