Submission #1064031

#TimeUsernameProblemLanguageResultExecution timeMemory
1064031amirhoseinfar1385Soccer Stadium (IOI23_soccer)C++17
0 / 100
4546 ms85076 KiB
#include "soccer.h"
#include<bits/stdc++.h>
using namespace std;
const int maxn=2000+10;
int n,all[maxn][maxn],dpb[maxn][maxn],dpp[maxn][maxn];

void clear(){
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=n+1;j++){
            all[i][j]=dpb[i][j]=dpp[i][j]=0;
        }
    }
}

void calbal(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(all[i][j]==1){
                dpb[i][j]=0;
            }else{
                dpb[i][j]=dpb[i-1][j]+1;
            }
        }
    }
}

void calpaee(){
    for(int i=n;i>=1;i--){
        for(int j=1;j<=n;j++){
            if(all[i][j]==0){
                dpp[i][j]=dpp[i+1][j]+1;
            }else{
                dpp[i][j]=0;
            }
        }
    }
}

int cal(int r,int c){
    int ret=0;
    int mn1=n,mn2=n;
    for(int i=c;i>=1;i--){
        mn1=min(dpp[r][i],mn1);
        mn2=min(dpb[r][i],mn2);
        ret+=mn1+mn2;
        if(mn1!=0&&mn2!=0){
            ret--;
        }
    }
    mn1=n;
    mn2=n;
    for(int i=c;i<=n;i++){
        mn1=min(dpp[r][i],mn1);
        mn2=min(mn2,dpb[r][i]);
        if(i==c){
            continue;
        }
        ret+=mn1+mn2;
        if(mn1!=0&&mn2!=0){
            ret--;
        }
    }
    return ret;
}

int solve(){
    int ret=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            ret=max(ret,cal(i,j));
        }
    }
    clear();
    return ret;
}

int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
    n=N;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            all[i][j]=F[i-1][j-1];
        }
    }
    calbal();
    calpaee();
    return solve();
}
#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...