Submission #839810

#TimeUsernameProblemLanguageResultExecution timeMemory
839810nigus축구 경기장 (IOI23_soccer)C++17
25 / 100
289 ms54420 KiB
#include "soccer.h"

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;

const int MAXN = 2001;

int n;
int grid[MAXN][MAXN] = {0};

bool contains(pii p2, pii p1){
    return (p1.first >= p2.first && p1.second <= p2.second); 
}

int biggest_stadium(int N, vector<vi> F)
{   

    n = N;
    rep(c1,0,n){
        rep(c2,0,n){
            grid[c1][c2] = F[c1][c2];
        }
    }

    int x = 0;
    int y = n-1;

    rep(c1,0,n){
        int emp = 0;
        rep(c2,0,n){
            emp += grid[c1][c2];
        }
        if(emp != n){
            x = c1;
            break;
        }
    }
    for(int c1 = n-1; c1 >= 0; c1--){
        int emp = 0;
        rep(c2,0,n){
            emp += grid[c1][c2];
        }
        if(emp != n){
            y = c1;
            break;
        }
    }

    int lo = n;
    int hi = -1;
    bool sub = 0;

    int ans = 0;
    bool fail = 0;

    vector<pii> intervals;

    rep(c1,x,y+1){
        
        int lo2 = n;
        int hi2 = -1;
        int tot = 0;
        rep(c2,0,n){
            if(grid[c1][c2] == 0){
                tot++;
                lo2 = min(lo2, c2);
                hi2 = max(hi2, c2);
            }
        }

        pii p1 = {lo2,hi2};
        trav(p2, intervals){
            if(!contains(p1,p2) && !contains(p2,p1)){
                fail = 1;
            }
        }

        intervals.push_back(p1);

        ans += tot;
        if(tot != hi2-lo2+1)fail = 1;

        if(sub == 1){
            if(lo2 < lo || hi2 > hi){
                fail = 1;
            }
        }
        else{
            if(lo2 > lo || hi2 < hi){
                if(lo2 >= lo && hi2 <= hi){
                    sub = 1;
                }
                else{
                    fail = 1;
                }
            }
        }   
        lo = lo2;
        hi = hi2;
    }

    if(!fail){
        return ans;
    }

    return 0;
}
#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...