Submission #1226993

#TimeUsernameProblemLanguageResultExecution timeMemory
1226993MarwenElarbiSoccer Stadium (IOI23_soccer)C++17
8 / 100
3817 ms416 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
    int ans=0;
    for (int cnt = 0; cnt < (1<<(N*N)); ++cnt)
    {
        pair<int,int> tab[2][N];
        int grid[N][N];
        bool nab=true;
        int cte=0;
        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < N; ++j)
            {
                if((1<<(N*i+j))&cnt) grid[i][j]=1;
                else grid[i][j]=0;
                if(grid[i][j]!=F[i][j]&&F[i][j]==1) nab=false;
            }
        }
        if(!nab) continue;
        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(grid[i][j]==0){
                    tab[0][i].fi=min(tab[0][i].fi,j);
                    tab[0][i].se=max(tab[0][i].se,j);
                    cte++;
                }
                if(grid[i][j]==0){
                    test=true;
                }
                if(grid[i][j]==1&&test){
                    test1=true;  
                } 
                if(grid[i][j]==0&&test1) nab=false;
            }
        }
        for (int i = 0; i < N; ++i)
        {
            bool test=false;
            bool test1=false;
            for (int j = 0; j < N; ++j)
            {
                if(grid[j][i]==0){
                    tab[1][i].fi=min(tab[1][i].fi,j);
                    tab[1][i].se=max(tab[1][i].se,j);
                }
                if(grid[j][i]==0) {
                    test=true;
                }
                if(grid[j][i]==1&&test) {
                    test1=true;
                }
                if(grid[j][i]==0&&test1) nab=false;
            }
        }
        //cout << "hey"<<endl;
        /*for (int i = 0; i < N; ++i)
        {
            cout << tab[0][i].fi<<" "<<tab[0][i].se<<endl;
        }*/
        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))){
                    nab=false;
                }   
            }
        }
        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))){
                    nab=false;
                }   
            }
        }
        if(nab) ans=max(ans,cte);
    }
    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...