Submission #1242328

#TimeUsernameProblemLanguageResultExecution timeMemory
1242328Hamed_GhaffariSoccer Stadium (IOI23_soccer)C++20
6 / 100
196 ms31888 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;

const int MXN = 2003;

bool vis[MXN][MXN];
int n, 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(0<=xx && xx<n && 0<=yy && yy<n && !vis[xx][yy] && F[xx][yy]==0)
            dfs(xx, yy, F);
    }
}

int biggest_stadium(int n, vector<vector<int>> F) {
    ::n = n;
    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...