Submission #1227019

#TimeUsernameProblemLanguageResultExecution timeMemory
1227019MarwenElarbiSoccer Stadium (IOI23_soccer)C++17
2 / 100
4594 ms412 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second int biggest(int N, std::vector<std::vector<int>> F){ pair<int,int> tab[2][N]; int ans=0; for (int i = 0; i < N; ++i){ tab[0][i].fi=tab[1][i].fi=1e9; tab[0][i].se=tab[1][i].se=-1e9; } for (int i = 0; i < N; ++i) { bool test=false; bool test1=false; for (int j = 0; j < N; ++j) { if(F[i][j]==0){ tab[0][i].fi=min(tab[0][i].fi,j); tab[0][i].se=max(tab[0][i].se,j); ans++; } if(F[i][j]==0){ test=true; } if(F[i][j]==1&&test){ test1=true; } if(F[i][j]==0&&test1) return 0; } } for (int i = 0; i < N; ++i) { bool test=false; bool test1=false; for (int j = 0; j < N; ++j) { if(F[j][i]==0){ tab[1][i].fi=min(tab[1][i].fi,j); tab[1][i].se=max(tab[1][i].se,j); } if(F[j][i]==0) { test=true; } if(F[j][i]==1&&test) { test1=true; } if(F[j][i]==0&&test1) return 0; } } for (int i = 0; i < N; ++i) { if(tab[0][i].fi==1e9) continue; for (int j = 0; j < N; ++j) { if(tab[0][j].fi==1e9) continue; if (!((tab[0][i].fi<=tab[0][j].fi&&tab[0][i].se>=tab[0][j].se)||(tab[0][j].fi<=tab[0][i].fi&&tab[0][j].se>=tab[0][i].se))){ return 0; } } } for (int i = 0; i < N; ++i) { if(tab[1][i].fi==1e9) continue; for (int j = 0; j < N; ++j) { if(tab[1][j].fi==1e9) continue; if (!((tab[1][i].fi<=tab[1][j].fi&&tab[1][i].se>=tab[1][j].se)||(tab[1][j].fi<=tab[1][i].fi&&tab[1][j].se>=tab[1][i].se))){ return 0; } } } return ans; } int res=0; int n; vector<pair<int,int>> arr[10]; vector<pair<int,int>> cur; void dfs(int x){ if(x==n) { vector<vector<int>> F(n,vector<int> (n)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if(cur[i].fi<=j&&j<=cur[i].se) F[i][j]=0; else F[i][j]=1; } } res=max(res,biggest(n,F)); return; } for(auto u:arr[x]){ cur.push_back(u); dfs(x+1); cur.pop_back(); } } int biggest_stadium(int N, std::vector<std::vector<int>> F){ n=N; for (int i = 0; i < N; ++i) { arr[i].push_back({-1,-1}); bool test=false; for (int j = 0; j < N; ++j) { if(!test&&F[i][j]==0){ arr[i].push_back({j,j}); test=true; }if(test&&F[i][j]){ arr[i].back().se=j-1; test=false; } } if(test) arr[i].back().se=N-1; } set<pair<int,int>> total; for (int i = 0; i < N; ++i) { for(auto u:arr[i]) total.insert(u); } for (int i = 0; i < N; ++i) { for(auto u:arr[i]){ for(auto j:total){ if(min(u.se,j.se)>max(u.fi,j.fi)) arr[i].push_back({min(u.se,j.se),max(u.fi,j.fi)}); } } } dfs(0); return res; }
#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...