제출 #1161076

#제출 시각아이디문제언어결과실행 시간메모리
1161076MisterReaperBomb (IZhO17_bomb)C++20
100 / 100
241 ms56364 KiB
#include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif constexpr int inf = int(1E9) + 5; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int N, M; std::cin >> N >> M; std::vector<std::string> A(N); for (int i = 0; i < N; ++i) { std::cin >> A[i]; } int x = M, y = N; for (int r = 0; r < N; ++r) { for (int i = 0, j = 0; i < M; i = j) { if (A[r][i] == '0') { j++; } else { while (j < M && A[r][j] == '1') { j++; } x = std::min(x, j - i); } } } for (int c = 0; c < M; ++c) { for (int i = 0, j = 0; i < N; i = j) { if (A[i][c] == '0') { j++; } else { while (j < N && A[j][c] == '1') { j++; } y = std::min(y, j - i); } } } debug(x, y); std::vector<std::vector<int>> lef(N, std::vector<int>(M)); std::vector<std::vector<int>> rig(N, std::vector<int>(M)); for (int r = 0; r < N; ++r) { for (int i = 0; i < M; ++i) { if (A[r][i] == '1') { lef[r][i] = (i ? lef[r][i - 1] : 0) + 1; } } for (int i = M - 1; i >= 0; --i) { if (A[r][i] == '1') { rig[r][i] = (i == M - 1 ? 0 : rig[r][i + 1]) + 1; } } } std::vector<int> mx(N + 1, x); for (int j = 0; j < M; ++j) { int len = 0, lo = inf, hi = inf; for (int i = 0; i < N; ++i) { if (A[i][j] == '0') { len = 0; lo = inf; hi = inf; } else { len++; lo = std::min(lo, lef[i][j]); hi = std::min(hi, rig[i][j]); mx[len] = std::min(mx[len], lo + hi - 1); } } len = 0, lo = inf, hi = inf; for (int i = N - 1; i >= 0; --i) { if (A[i][j] == '0') { len = 0; lo = inf; hi = inf; } else { len++; lo = std::min(lo, lef[i][j]); hi = std::min(hi, rig[i][j]); mx[len] = std::min(mx[len], lo + hi - 1); } } } debug(mx); i64 ans = 0; for (int i = 1; i <= y; ++i) { mx[i] = std::min(mx[i], mx[i - 1]); ans = std::max(ans, 1LL * mx[i] * i); } std::cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...