Submission #1212857

#TimeUsernameProblemLanguageResultExecution timeMemory
1212857AvianshSoccer Stadium (IOI23_soccer)C++20
0 / 100
4591 ms6300 KiB
#include "soccer.h"
#include <bits/stdc++.h>

using namespace std;

int biggest_stadium(int n, vector<vector<int>> F)
{
    int lef[n][n];
    int rig[n][n];
    for(int i = 0;i<n;i++){
        int las = -1;
        for(int j = 0;j<n;j++){
            if(F[i][j])
                las=j;
            lef[i][j]=las;
        }
        las=n;
        for(int j = n-1;j>=0;j--){
            if(F[i][j])
                las=j;
            rig[i][j]=las;
        }
    }
    int ans = 0;
    for(int k = 0;k<n;k++){
        int curr = 0;
        for(int l = 0;l<=k;l++){
            for(int r = k;r<n;r++){
                vector<int>lens(r-l+1);
                for(int i = l;i<=r;i++){
                    int len = rig[i][k]-lef[i][k]-1;
                    lens[i-l]=len;
                }
                int m = r-l+1;
                int dp[m][n+1];
                //{considered lens till i, maximum height}
                for(int i = 0;i<m;i++){
                    dp[i][0]=0;
                    int bslas = 0;
                    for(int j = 1;j<=n;j++){
                        dp[i][j]=0;
                        if(j>lens[i])
                            continue;
                        if(i){
                            if(dp[i-1][bslas]<dp[i-1][j]){
                                bslas=j;
                            }
                            dp[i][j]=max(dp[i][j],dp[i-1][bslas]+j);
                        }
                        else{
                            dp[i][j]=j;
                        }
                    }
                }
                int dp2[m][n+1];
                //{considered lens till i, maximum height}
                for(int i = m-1;i>=0;i--){
                    dp2[i][0]=0;
                    int bslas = 0;
                    for(int j = 1;j<=n;j++){
                        dp2[i][j]=0;
                        if(j>lens[i])
                            continue;
                        if(i<m-1){
                            if(dp2[i+1][bslas]<dp2[i+1][j]){
                                bslas=j;
                            }
                            dp2[i][j]=max(dp2[i][j],dp2[i+1][bslas]+j);
                        }
                        else{
                            dp2[i][j]=j;
                        }
                    }
                }
                for(int i = 0;i<m;i++){
                    for(int j = 0;j<=n;j++){
                        ans=max(ans,dp[i][j]+dp2[i][j]-j);
                    }
                }
            }
        }
    }
    return ans;
}
#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...