Submission #1132424

#TimeUsernameProblemLanguageResultExecution timeMemory
1132424omsincoconutSoccer Stadium (IOI23_soccer)C++20
0 / 100
4598 ms94468 KiB
#include <bits/stdc++.h> using namespace std; int solve_one(int N, vector<vector<int>> F) { for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) F[i][j] = !F[i][j]; int latest[2][N][N]; for (int i = 0; i < N; i++) { // left -> right latest[0][i][0] = (F[i][0] ? 0 : -1); for (int j = 1; j < N; j++) { latest[0][i][j] = latest[0][i][j-1]; if (!F[i][j]) latest[0][i][j] = -1; else if (latest[0][i][j] == -1) latest[0][i][j] = j; } // right -> left latest[1][i][N-1] = (F[i][N-1] ? N-1 : -1); for (int j = N-2; j >= 0; j--) { latest[1][i][j] = latest[1][i][j+1]; if (!F[i][j]) latest[1][i][j] = -1; else if (latest[1][i][j] == -1) latest[1][i][j] = j; } } int ans = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (!F[i][j]) continue; int sm = 0; int l, r; // to left l = latest[0][i][j], r = latest[1][i][j]; for (int k = i; k >= 0; k--) { if (!F[k][j]) break; l = max(l, latest[0][k][j]); r = min(r, latest[1][k][j]); sm += r-l+1; } // to right l = latest[0][i][j], r = latest[1][i][j]; for (int k = i+1; k < N; k++) { if (!F[k][j]) break; l = max(l, latest[0][k][j]); r = min(r, latest[1][k][j]); sm += r-l+1; } ans = max(ans, sm); } } return ans; } int biggest_stadium(int N, vector<vector<int>> F) { vector<vector<int>> Ft(N, vector<int>(N)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { Ft[j][i] = F[i][j]; } } return max(solve_one(N, F), solve_one(N, Ft)); }
#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...