This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "soccer.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<vector<int>> row;
vector<vector<int>> col;
vector<vector<int>> arr;
int n;
bool check(int x1,int y1,int x2,int y2){
// int minx=min(x1,x2),maxx=max(x1,x2);
// int mixy=min(y1,y2),maxy=max(y1,y2);
return ((row[x1][y1] - row[x2][y1] == 0 && col[x2][y1] - col[x2][y2] == 0) || (col[x1][y1] - col[x1][y2] == 0 && row[x1][y2] - row[x2][y2] == 0));
}
int biggest_stadium(int N, vector<vector<int>> F)
{
arr=F;
n=N;
int ans=0;
row=F;
col=F;
for(int i=0; i < n;i++){
for(int j=1; j < n;j++){
row[i][j]+=row[i][j-1];
col[j][i]+=col[j-1][i];
}
}
queue<pair<int,int>> q;
for(int i=0; i < n;i++){
for(int j=0; j < n;j++){
int curr=1;
if(!arr[i][j]){
q.push({i+1,j});
q.push({i,j+1});
q.push({i-1,j});
q.push({i,j-1});
}
vector<pair<int,int>> found;
vector<vector<bool>> vis(n,vector<bool>(n));
found.push_back({i,j});
while(!q.empty()){
int x=q.front().first,y=q.front().second;
q.pop();
bool ok=true;
if(x==0 || x==n || y==0 || y==n || arr[x][y] || vis[x][y]) continue;
for(pair<int,int> c : found){
if(!check(c.first,c.second, x , y)){
ok=false;
break;
}
}
if(!ok) continue;
vis[x][y]=true;
curr++;
q.push({x+1,y});
q.push({x,y+1});
q.push({x-1,y});
q.push({x,y-1});
}
ans=max(ans,curr);
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |