Submission #854575

#TimeUsernameProblemLanguageResultExecution timeMemory
854575The_SamuraiBomb (IZhO17_bomb)C++17
35 / 100
1095 ms38608 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int inf = 1e9, N = 1e6 + 5; int main() { cin.tie(0)->sync_with_stdio(false); #ifdef sunnatov freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #else // freopen("game.in", "r", stdin); // freopen("game.out", "w", stdout); #endif int n, m; cin >> n >> m; vector<vector<char>> a(n + 1, vector<char>(m + 1)); vector<vector<int>> pref(n + 1, vector<int>(m + 1)); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) { cin >> a[i][j]; pref[i][j] = pref[i][j - 1] + pref[i - 1][j] - pref[i - 1][j - 1] + (int) (a[i][j] == '1'); } auto get_sum = [&](int x1, int y1, int x2, int y2) { return pref[x2][y2] - pref[x2][y1 - 1] - pref[x1 - 1][y2] + pref[x1 - 1][y1 - 1]; }; auto check = [&](int h, int w) { vector<vector<bool>> vis(n + 1, vector<bool>(m + 1)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (a[i][j] == '0') continue; if (i + h - 1 <= n and j + w - 1 <= m and get_sum(i, j, i + h - 1, j + w - 1) == h * w) { for (int x = i; x < i + h; x++) { for (int y = j; y < j + w; y++) { vis[x][y] = true; } } } if (!vis[i][j]) return false; } } return true; }; auto get = [&](int h) { int lx = 1, rx = m, best = 0; while (lx <= rx) { int mid = (lx + rx) >> 1; if (check(h, mid)) { best = mid; lx = mid + 1; } else { rx = mid - 1; } } return best; }; int ans = 0, last = 0; for (int h = 1; h <= n; h++) { ans = max(ans, get(h) * h); } cout << ans; }

Compilation message (stderr)

bomb.cpp: In function 'int main()':
bomb.cpp:58:18: warning: unused variable 'last' [-Wunused-variable]
   58 |     int ans = 0, last = 0;
      |                  ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...