Submission #1235509

#TimeUsernameProblemLanguageResultExecution timeMemory
1235509k1r1t0Soccer Stadium (IOI23_soccer)C++20
64 / 100
1884 ms1007776 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 510; short ly[N][N][N], ry[N][N][N]; bool a[N][N]; int s[N][N], dp[N][N][N], m; int biggest_stadium(int n, vector<vector<int>> f) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) a[i][j] = f[i - 1][j - 1]; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) s[i][j] = s[i][j - 1] + a[i][j]; for (int i = 1; i <= n; i++) for (int l = 1; l <= n; l++) for (int r = l; r <= n; r++) ly[i][l][r] = ry[i][l][r] = -1; for (int l = 1; l <= n; l++) for (int r = n; r >= l; r--) { int ptr = 1; while (ptr <= n) { if (s[ptr][r] - s[ptr][l - 1] > 0) { ptr++; continue; } int last = ptr; while (last <= n && s[last][r] - s[last][l - 1] == 0) last++; for (int i = ptr; i < last; i++) { ly[i][l][r] = ptr; ry[i][l][r] = last - 1; } ptr = last; } } int ans = 0; for (int i = 1; i <= n; i++) for (int l = 1; l <= n; l++) for (int r = n; r >= 1; r--) if (ly[i][l][r] >= 0) { int u = ly[i][l][r]; int v = ry[i][l][r]; dp[i][l][r] = max(dp[i][l][r], (v - u + 1) * (r - l + 1)); ans = max(ans, dp[i][l][r]); if (l < r) { int nu = ly[i][l + 1][r]; int nv = ry[i][l + 1][r]; dp[i][l + 1][r] = max(dp[i][l + 1][r], dp[i][l][r] + (nv - v + u - nu) * (r - l)); nu = ly[i][l][r - 1]; nv = ry[i][l][r - 1]; dp[i][l][r - 1] = max(dp[i][l][r - 1], dp[i][l][r] + (nv - v + u - nu) * (r - l)); } } return ans; } /* int main() { int N; assert(1 == scanf("%d", &N)); std::vector<std::vector<int>> F(N, std::vector<int>(N)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { assert(1 == scanf("%d", &F[i][j])); } } fclose(stdin); int res = biggest_stadium(N, F); printf("%d\n", res); fclose(stdout); return 0; } //*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...