Submission #842495

#TimeUsernameProblemLanguageResultExecution timeMemory
842495CodePlatinaSoccer Stadium (IOI23_soccer)C++17
0 / 100
4519 ms63056 KiB
#include "soccer.h"
#include <iostream>
#include <algorithm>
#define pii pair<int, int>
#define ff first
#define ss second

using namespace std;

const int INF = (int)1e9 + 7;

int biggest_stadium(int N, vector<vector<int>> F)
{
    int L[N][N], R[N][N];
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j)
        {
            if(F[i][j]) L[i][j] = j;
            else L[i][j] = (j ? L[i][j - 1] : -1);
        }
        for(int j = N - 1; j >= 0; --j)
        {
            if(F[i][j]) R[i][j] = j;
            else R[i][j] = (j < N - 1 ? R[i][j + 1] : N);
        }
    }

    int ret = 0;
    for(int i = 0; i < N; ++i)
    {
        for(int j = 0; j < N; ++j) if(!F[i][j])
        {
            int ans = R[i][j] - L[i][j] - 1;
            int l = L[i][j], r = R[i][j];
            for(int k = i + 1; k < N && !F[k][j]; ++k)
            {
                l = max(l, L[k][j]);
                r = min(r, R[k][j]);
                ans += r - l - 1;
            }
            l = L[i][j], r = R[i][j];
            for(int k = i - 1; k >= 0 && !F[k][j]; --k)
            {
                l = max(l, L[k][j]);
                r = min(r, R[k][j]);
                ans += r - l - 1;
            }
            ret = max(ret, ans);
        }
    }

    return ret;
}
#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...