Submission #1291205

#TimeUsernameProblemLanguageResultExecution timeMemory
1291205LIABomb (IZhO17_bomb)C++17
90 / 100
226 ms74168 KiB
// // Created by liasa on 15/11/2025. // #include <bits/stdc++.h> using namespace std; #define ll int #define vll vector<ll> #define loop(i, s, e) for (ll i = s; i < e; ++i) int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, m; cin >> n >> m; vector<vll> grid(n, vll(m)); bool cnt = 0; loop(i, 0, n) { string s; cin >> s; loop(j, 0, m) { grid[i][j] = (s[j] - '0'); if (grid[i][j]) cnt = 1; } } if (!cnt) { cout << 0; return 0; } vector<vll> up(n, vll(m)), dn(n, vll(m)); loop(j, 0, m) { loop(i, 0, n) { if (grid[i][j]) up[i][j] = (i ? up[i - 1][j] : 0) + 1; else up[i][j] = 0; } for (ll i = n - 1; i >= 0; --i) { if (grid[i][j]) dn[i][j] = (i + 1 < n ? dn[i + 1][j] : 0) + 1; else dn[i][j] = 0; } } vll ans(m + 1, n); loop(i, 0, n) { for (ll j = 0; j < m;) { if (!grid[i][j]) { j++; continue; } ll L = j, min_up = -1e9, min_down = 1e9, k = j; while (k < m && grid[i][k]) { min_up = max(min_up, i - up[i][k] + 1); min_down = min(min_down, i + dn[i][k] - 1); ll w = k - L + 1; ll cap = min_down - min_up + 1; if (cap < 0) cap = 0; ans[w] = min(ans[w], cap); k++; } ll len = k - L; if (len + 1 <= m) ans[len + 1] = 0; j = k; } } loop(i, 0, n) { for (ll j = m - 1; j >= 0;) { if (!grid[i][j]) { j--; continue; } ll R = j, min_up = -1e9, min_down = 1e9, k = j; while (k >= 0 && grid[i][k]) { min_up = max(min_up, i - up[i][k] + 1); min_down = min(min_down, i + dn[i][k] - 1); ll w = R + 1 - k; ll B = min_down - min_up + 1; if (B < 0) B = 0; ans[w] = min(ans[w], B); k--; } ll len = R - k; if (len + 1 <= m) ans[len + 1] = 0; j = k; } } for (ll w = 1; w <= m; ++w) ans[w] = min(ans[w], ans[w - 1]); ll res = 0; for (ll w = 1; w <= m; ++w) res = max(res, w * ans[w]); cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...