Submission #937648

#TimeUsernameProblemLanguageResultExecution timeMemory
937648WansurSoccer Stadium (IOI23_soccer)C++17
48 / 100
860 ms117972 KiB
#include <bits/stdc++.h> #define f first #define s second #define ent '\n' #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #pragma GCC optimize("Ofast,unroll-loops,fast-math,O3") typedef long long ll; using namespace std; struct seg{ int m1,m2,sum,cnt; }; const string out[2]={"NO\n","YES\n"}; const ll dx[]={0,1,0,-1,-1,1,1,-1}; const ll dy[]={1,0,-1,0,-1,1,-1,1}; const int mod=998244353; const int md=1e9+7; const int mx=2e3+12; const bool T=0; int dp[61][61][61][61]; bool used[2001][2001]; int pref[61][61]; int n; int get(int i,int l,int r){ if(!l)return pref[i][r]; return pref[i][r]-pref[i][l-1]; } void dfs(int x,int y){ used[x][y]=1; for(int i=0;i<4;i++){ int x1=dx[i]+x,y1=dy[i]+y; if(min(x1,y1)>=0 && max(x1,y1)<n && !used[x1][y1]){ dfs(x1,y1); } } } int solve(int N, vector<vector<int>> a){ int sum=0; n=N; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ sum+=!a[i][j]; if(a[i][j]){ used[i][j]=1; } } } bool ok=0; int pos=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(!used[i][j]){ pos=i; if(ok)return 0; ok=1; dfs(i,j); } } } int l=-1,r=-1; int len=0,sg=0; vector<pair<int,int>> v; for(int i=pos;i<n;i++){ int tl=-1,tr=-1,sum=0; for(int j=0;j<n;j++){ if(!a[i][j]) { ok = 1; if(tl==-1){ tl=j; } tr=j; sum++; } } if(tl==-1)break; if(l==-1){ l=tl,r=tr; } if(!(l<=tl && tr<=r || tl<=l && r<=tr) || sum!=tr-tl+1){ return 0; } if(r-l+1 <= tr-tl+1){ if(r-l+1 < tr-tl+1 && sg){ return 0; } } else{ sg=1; } l=tl,r=tr; v.push_back({tl,tr}); } sort(v.begin(),v.end(),[](pair<int,int> a,pair<int,int> b){ return a.s-a.f>b.s-b.f; }); l=v[0].f,r=v[0].s; for(auto [tl,tr]: v){ if(tl < l || tr > r){ return 0; } l=tl, r=tr; } return sum; } int biggest_stadium(int N, vector<vector<int>> a) { n = N; if (n > 30) { } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { pref[i][j] = a[i][j]; if (j)pref[i][j] += pref[i][j - 1]; } } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int l=0;l<n;l++){ for(int r=0;r<n;r++){ dp[i][j][l][r]=-1e9; } } } } for(int i=0;i<n;i++){ for(int l=0;l<n;l++){ for(int r=l;r<n;r++){ if(a[i][r])break; ans=max(ans,r-l+1); dp[i][i][l][r]=r-l+1; } } } for(int len=2;len<=n;len++){ for(int i=0;i+len-1<n;i++){ int j=i+len-1; for(int len=1;len<=n;len++){ for(int l=0;l+len-1<n;l++){ int r=l+len-1; if(!get(i,l,r)){ for(int tl=l;tl>=0;tl--){ for(int tr=r;tr<n;tr++){ dp[i][j][l][r]=max(dp[i][j][l][r], dp[i+1][j][tl][tr] + r-l+1); } } } if(!get(j,l,r)){ for(int tl=l;tl>=0;tl--){ for(int tr=r;tr<n;tr++){ dp[i][j][l][r]=max(dp[i][j][l][r], dp[i][j-1][tl][tr] + r-l+1); } } } ans=max(ans,dp[i][j][l][r]); } } } } return ans; }

Compilation message (stderr)

soccer.cpp: In function 'int solve(int, std::vector<std::vector<int> >)':
soccer.cpp:87:20: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   87 |         if(!(l<=tl && tr<=r || tl<=l && r<=tr) || sum!=tr-tl+1){
      |              ~~~~~~^~~~~~~~
soccer.cpp:69:9: warning: unused variable 'len' [-Wunused-variable]
   69 |     int len=0,sg=0;
      |         ^~~
#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...