Submission #937539

#TimeUsernameProblemLanguageResultExecution timeMemory
937539Wansur축구 경기장 (IOI23_soccer)C++17
25 / 100
589 ms418896 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define ent '\n'

#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")

typedef long long ll;
using namespace std;
struct seg{
    int m1,m2,sum,cnt;
};

const string out[2]={"NO\n","YES\n"};

const ll dx[]={0,1,0,-1,-1,1,1,-1};
const ll dy[]={1,0,-1,0,-1,1,-1,1};
const int mod=998244353;
const int md=1e9+7;
const int mx=2e3+12;
const bool T=0;

bool used[2001][2001];
int n;

void dfs(int x,int y){
    used[x][y]=1;
    for(int i=0;i<4;i++){
        int x1=dx[i]+x,y1=dy[i]+y;
        if(min(x1,y1)>=0 && max(x1,y1)<n && !used[x1][y1]){
            dfs(x1,y1);
        }
    }
}

int biggest_stadium(int N, vector<vector<int>> a){
    int sum=0;
    n=N;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            sum+=!a[i][j];
            if(a[i][j]){
                used[i][j]=1;
            }
        }
    }
    bool ok=0;
    int pos=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(!used[i][j]){
                pos=i;
                if(ok)return 0;
                ok=1;
                dfs(i,j);
            }
        }
    }
    int l=-1,r=-1;
    vector<pair<int,int>> v;
    for(int i=pos;i<n;i++) {
        int tl = -1, tr = -1, sum = 0;
        for (int j = 0; j < n; j++) {
            if (!a[i][j]) {
                ok = 1;
                if (tl == -1) {
                    tl = j;
                }
                tr = j;
                sum++;
            }
        }
        if (tl==-1){
            break;
        }
        if(sum!=tr-tl+1){
            return 0;
        }
        v.push_back({tl,tr});
    }
    for(int i=0;i<v.size();i++){
        auto [l,r]=v[i];
        int mxl=l, mnr=r;
        for(int j=i+1;j<v.size();j++){
            auto [tl, tr]=v[j];
            mxl=max(mxl,tl);
            mnr=min(mnr,tr);
            if(tr > r && (mxl > l || mnr < r))return 0;
            if(tl < l && (mnr < r || mxl > l))return 0;
            if(tr < r && (mxl > tl || mnr < tr))return 0;
            if(tl > l && (mnr < tr || mxl > tl))return 0;
        }
    }
    return sum;
}

Compilation message (stderr)

soccer.cpp: In function 'int biggest_stadium(int, std::vector<std::vector<int> >)':
soccer.cpp:82:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |     for(int i=0;i<v.size();i++){
      |                 ~^~~~~~~~~
soccer.cpp:85:24: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |         for(int j=i+1;j<v.size();j++){
      |                       ~^~~~~~~~~
soccer.cpp:60:9: warning: unused variable 'l' [-Wunused-variable]
   60 |     int l=-1,r=-1;
      |         ^
soccer.cpp:60:14: warning: unused variable 'r' [-Wunused-variable]
   60 |     int l=-1,r=-1;
      |              ^
#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...