Submission #937307

#TimeUsernameProblemLanguageResultExecution timeMemory
937307Dan4LifeSoccer Stadium (IOI23_soccer)C++17
8 / 100
4562 ms512 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; #define pf push_front #define pb push_back #define ll long long #define vi vector<int> #define sz(a) (int)a.size() #define lb lower_bound #define ub upper_bound #define all(a) begin(a),end(a) const int mxN = 2010; int n; vector<int> col[mxN]; int biggest_stadium(int N, vector<vi> a) { n = N; int ans = 0; for(int i = 0; i < n; i++) col[i].clear(), col[i].pb(-1); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) if(a[i][j]) col[j].pb(i); for(int i = 0; i < n; i++) col[i].pb(n); for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ if(a[i][j]) continue; for(int k = i; k < n; k++){ if(a[k][j]) break; for(int l = j; l < n; l++){ int tot = 0; int pos = lb(all(col[l]),i)-begin(col[l]); if(col[l][pos]<=k) break; // if a[i][l]...a[k][l] contains forest int DOWN = i, UP = i; while(UP>0 and !a[UP-1][l]) UP--; // while we dont have forest, go up while(DOWN<n-1 and !a[DOWN+1][l]) DOWN++; // " " go down tot+=DOWN-UP+1; if(l!=j) tot+=k-i+1; int up2 = UP, down2 = DOWN; bool bad = 0; for(int m = l-1; m > j; m--){ int pos = lb(all(col[m]),i)-begin(col[m]); int up = max(UP, col[m][pos-1]+1); int down = min(DOWN, col[m][pos]-1); if(up>down) bad = 1; UP = up, DOWN = down; tot+=down-up+1; } if(bad) continue; UP = up2, DOWN = down2; for(int m = l+1; m < n; m++){ int pos = lb(all(col[m]),i)-begin(col[m]); int up = max(UP, col[m][pos-1]+1); int down = min(DOWN, col[m][pos]-1); if(up>down) break; UP = up, DOWN = down; tot+=down-up+1; } ans = max(ans, tot); } } } } 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...