제출 #1132424

#제출 시각아이디문제언어결과실행 시간메모리
1132424omsincoconut축구 경기장 (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...