제출 #1242321

#제출 시각아이디문제언어결과실행 시간메모리
1242321Hamed_GhaffariSoccer Stadium (IOI23_soccer)C++20
6 / 100
198 ms31892 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; const int MXN = 2003; bool vis[MXN][MXN]; int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; void dfs(int x, int y, vector<vector<int>> &F){ vis[x][y] = 1; for(int d=0,xx,yy; d<4; d++) { xx = x+dx[d], yy = y+dy[d]; if(!vis[xx][yy] && F[xx][yy]==0) dfs(xx, yy, F); } } int biggest_stadium(int n, vector<vector<int>> F) { int cnt=0; for(int i=0; i<n; i++) for(int j : F[i]) cnt += j; if(cnt==0) return n*n; if(cnt==1) { int x=-1, y=-1; for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(F[i][j]) x=i, y=j; return n*n - min(x+1, n-x)*min(y+1, n-y); } for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(F[i][j]==0) dfs(i, j, F); for(int i=0; i<n; i++) for(int j=0; j<n; j++) if(F[i][j]==0 && !vis[i][j]) return 0; for(int i=0; i<n; i++) { int l=-1, r=-1; for(int j=0; j<n; j++) if(F[i][j]==0) { if(l==-1) l=j; r = j; } if(l!=-1) for(int j=l; j<=r; j++) if(F[i][j]==1) return 0; } for(int j=0; j<n; j++) { int l=-1, r=-1; for(int i=0; i<n; i++) if(F[i][j]==0) { if(l==-1) l=i; r=i; } if(l!=-1) for(int i=l; i<=r; i++) if(F[i][j]==1) return 0; } return n*n-cnt; }
#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...