Submission #930065

#TimeUsernameProblemLanguageResultExecution timeMemory
930065abcvuitunggioSoccer Stadium (IOI23_soccer)C++17
19.50 / 100
422 ms246528 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; const int mxn=2006; int n,res,dp[mxn][mxn],l[mxn][mxn],u[mxn][mxn],d[mxn][mxn],ch[mxn][mxn],a[mxn][mxn],b[mxn][mxn]; vector <int> ve[mxn][mxn]; vector <vector <int>> tmp; int f(int i, int j){ if (dp[i][j]!=-1) return dp[i][j]; dp[i][j]=0; int sz=j-l[i][j]+1; for (int k:ve[i][j]) dp[i][j]=max(dp[i][j],f(k,j)-sz*(d[k][j]-u[k][j]+1)); if (j<n-1&&!tmp[i][j+1]) dp[i][j]=max(dp[i][j],f(i,j+1)-sz*(d[i][j+1]-u[i][j+1]+1)); dp[i][j]+=sz*(d[i][j]-u[i][j]+1); return dp[i][j]; } int biggest_stadium(int N, vector <vector <int>> F){ n=N,tmp=F; for (int i=0;i<n;i++) for (int j=0;j<n;j++){ l[i][j]=(j&&!F[i][j-1]?l[i][j-1]:j); d[i][j]=n-1; } memset(a,-1,sizeof(a)); memset(b,-1,sizeof(b)); for (int j=0;j<n;j++){ stack <int> st; for (int i=0;i<n;i++){ if (F[i][j]){ while (!st.empty()){ d[st.top()][j]=i-1; st.pop(); } continue; } while (!st.empty()&&l[i][j]>l[st.top()][j]){ d[st.top()][j]=i-1; st.pop(); } if (!st.empty()){ if (l[i][j]==l[st.top()][j]){ a[i][j]=st.top(); continue; } ve[st.top()][j].push_back(i); } ch[i][j]=1; st.push(i); } while (!st.empty()) st.pop(); for (int i=n-1;i>=0;i--){ if (F[i][j]){ while (!st.empty()){ u[st.top()][j]=i+1; st.pop(); } continue; } while (!st.empty()&&l[i][j]>l[st.top()][j]){ u[st.top()][j]=i+1; st.pop(); } if (!st.empty()){ if (l[i][j]==l[st.top()][j]){ b[i][j]=st.top(); continue; } ve[st.top()][j].push_back(i); } ch[i][j]=1; st.push(i); } } for (int i=0;i<n;i++) for (int j=0;j<n;j++){ if (a[i][j]>=0) d[i][j]=d[a[i][j]][j]; if (b[i][j]>=0) u[i][j]=u[b[i][j]][j]; } memset(dp,-1,sizeof(dp)); int ans=0; for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (ch[i][j]) ans=max(ans,f(i,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...