Submission #1241243

#TimeUsernameProblemLanguageResultExecution timeMemory
1241243candi_ositosSoccer Stadium (IOI23_soccer)C++20
31 / 100
468 ms49176 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; int test(int N, vector <vector <int> > F){ int lmt=-1, rmt=-1, umt=-1, dmt=-1; vector <int> ums, dms, rms, lms; ums.assign(N, -1); dms.assign(N, -1); rms.assign(N, -1); lms.assign(N, -1); for(int i=0; i<N; ++i){ for(int j=0; j<N; ++j){ if(F[i][j]){ if(i>0){ if(!F[i-1][j] && umt==-1){ umt=i; } } if(j>0){ if(!F[i][j-1] && (lmt==-1 || lmt>j)){ lmt=j; } } if(i<N-1){ if(!F[i+1][j]){ dmt=i; } } if(j<N-1){ if(!F[i][j+1] && rmt<j){ rmt=j; } } } else{ if(ums[j]==-1){ ums[j]=i; } if(lms[i]==-1){ lms[i]=j; } rms[i]=j; dms[j]=i; } } } if((umt<=dmt+1 && (umt!=-1 && dmt!=-1)) || (lmt<=rmt+1 && (lmt!=-1 && rmt!=-1))){ return 0; } for(int i=0; i<N; ++i){ if(ums[i]!=-1){ for(int j=0; j<N; ++j){ if(dms[j]!=-1){ if(F[ums[i]][j] && F[dms[j]][i]){ return 0; } } } } } for(int i=0; i<N; ++i){ if(lms[i]!=-1){ for(int j=0; j<N; ++j){ if(rms[j]!=-1){ if(F[j][lms[i]] && F[i][rms[j]]){ return 0; } } } } } vector <bool> bsc; for(int i=0; i<N; ++i){ for(int j=0; j<N; ++j){ if(!F[i][j]){ bsc.push_back(0); } } } int aux=bsc.size(); return aux; } int biggest_stadium(int N, vector <vector <int> > F) { int nosirvo=test(N, F); if(nosirvo>0){ return nosirvo; } int tc=0; int x=-1; int y=-1; for(int i=0; i<N; ++i){ for(int j=0; j<N; ++j){ if(F[i][j]){ ++tc; x=i; y=j; } } } if(tc==0){ return N*N; } if(tc==1){ if(x>N-x){ x=N-x; } if(y>N-y){ y=N-y; } return N*N-(x+1)*(y+1); } if(tc==N*N-1){ return 1; } if(N>3){ return 0; } vector <vector <int> > Q; vector <int> nose; nose.push_back(1); Q.push_back(nose); if(!F[0][0]){ nose[0]=0; Q.push_back(nose); } for(int i=0; i<N; ++i){ for(int j=0; j<N; ++j){ if(j>0 || i>0){ int k=Q.size(); if(!F[i][j]){ for(int l=0; l<k; ++l){ Q.push_back(Q[l]); Q[Q.size()-1].push_back(1); } } for(int l=0; l<k; ++l){ Q[l].push_back(F[i][j]); } } } } vector <vector <vector <int> > > TQ; TQ.resize(Q.size()); for(unsigned int i=0; i<Q.size(); ++i){ TQ[i].assign(N, vector <int>(N, 0)); for(int j=0; j<N*N; ++j){ TQ[i][j/N][j%N]=Q[i][j]; } } int mx=0; for(unsigned int i=0; i<TQ.size(); ++i){ int aux; aux=test(N, TQ[i]); if(aux>mx){ mx=aux; } } return mx; }
#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...