Submission #845046

#TimeUsernameProblemLanguageResultExecution timeMemory
845046JoksimKaktusSoccer Stadium (IOI23_soccer)C++17
22 / 100
4552 ms47524 KiB
#include "soccer.h"
#include "bits/stdc++.h"

using namespace std;

std::vector<std::vector<int>> f;

bool check(int i1,int j1,int i2,int j2){
    if(i1 < i2){
        int temp = i1;
        i1 = i2;
        i2 = temp;
        temp = j1;
        j1 = j2;
        j2 = temp;
    }
        bool way = true;
        for(int i = i1;i >= i2;i--){
            if(f[i][j1] == 1){
                way = false;
                break;
            }
        }
        if(way){
            if(j1 >= j2){
                for(int j = j1;j >= j2;j--){
                    if(f[i2][j] == 1){
                        way = false;
                        break;
                    }
                }
            }else{
                for(int j = j1;j <= j2;j++){
                    if(f[i2][j] == 1){
                        way = false;
                        break;
                    }
                }
            }
        }
        if(!way){
            way = true;
            if(j1 >= j2){
                for(int j = j1;j >= j2;j--){
                    if(f[i1][j] == 1){
                        way = false;
                        break;
                    }
                }
            }else{
                for(int j = j1;j <= j2;j++){
                    if(f[i1][j] == 1){
                        way = false;
                        break;
                    }
                }
            }
            if(way){
                for(int i = i1;i >= i2;i--){
                    if(f[i][j2] == 1){
                        return false;
                    }
                }
            }else{
                return false;
            }
        }
        return true;
}

int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
    f = std::vector<std::vector<int>>(N, std::vector<int>(N, 0));
    for(int i = 0;i < N;i++){
        for(int j = 0;j < N;j++){
            f[i][j] = F[i][j];
        }
    }
    int n,s,e,w;
    n = N;
    s = 0;
    w = N;
    e = 0;
    int num = 0;
    int x;
    int y;
    for(int i = 0;i < N;i++){
        for(int j = 0;j < N;j++){
            if(F[i][j] == 1){
                x = i;
                y = j;
                num++;
            }
        }
    }
    if(num == 1 || num == 0){
        if(num == 0){
            return N*N;
        }
        int res = 0;
        res = max(res,N*N-((x+1)*(y+1)));
        res = max(res,N*N-((x+1)*(N-y)));
        res = max(res,N*N-((N-x)*(y+1)));
        res = max(res,N*N-((N-x)*(N-y)));
        return res;
    }
    for(int i = 0; i < N;i++){
        int con = 0;
        for(int j = 0;j < N;j++){
            if(F[i][j] == 1){
                if(con == 1){
                    con = 2;
                }
            }else{
                n = min(n,i);
                s = i;
                if(con == 0){
                    con = 1;
                }else if(con == 2){
                    return 1;
                }
            }
        }
    }
    for (int j = 0; j < N; j++) {
        int con = 0;
        for (int i = 0; i < N; i++) {
            if (F[i][j] == 1) {
                if (con == 1) {
                    con = 2;
                }
            } else {
                w = min(w, j);
                e = j;
                if (con == 0) {
                    con = 1;
                } else if (con == 2) {
                    return 1;
                }
            }
        }
    }
    for (int i = 0; i < N; i++) {
        if (F[i][w] == 0) {
            for (int i2 = 0; i2 < N; i2++) {
                for (int j2 = 0; j2 < N; j2++) {
                    if (F[i2][j2] == 0) {
                        if (!check(i, w, i2, j2)) {
                            return 1;
                        }
                    }
                }
            }
        }
        if (F[i][e] == 0) {
            for (int i2 = 0; i2 < N; i2++) {
                for (int j2 = 0; j2 < N; j2++) {
                    if (F[i2][j2] == 0) {
                        if (!check(i, e, i2, j2)) {
                            return 1;
                        }
                    }
                }
            }
        }
        if (F[n][i] == 0) {
            for (int i2 = 0; i2 < N; i2++) {
                for (int j2 = 0; j2 < N; j2++) {
                    if (F[i2][j2] == 0) {
                        if (!check(n, i, i2, j2)) {
                            return 1;
                        }
                    }
                }
            }
        }
        if (F[s][i] == 0) {
            for (int i2 = 0; i2 < N; i2++) {
                for (int j2 = 0; j2 < N; j2++) {
                    if (F[i2][j2] == 0) {
                        if (!check(s, i, i2, j2)) {
                            return 1;
                        }
                    }
                }
            }
        }
    }
    return N*N-num;
}
/*
7
1 1 1 0 1 1 1
1 1 1 0 0 1 1
1 1 0 0 0 0 0
1 0 0 0 0 0 0
1 1 0 0 1 1 1
1 1 0 0 1 1 1
1 1 0 0 1 1 1
 3
 1 0 0
 0 0 1
 0 0 0
 */


Compilation message (stderr)

soccer.cpp: In function 'int biggest_stadium(int, std::vector<std::vector<int> >)':
soccer.cpp:102:36: warning: 'y' may be used uninitialized in this function [-Wmaybe-uninitialized]
  102 |         res = max(res,N*N-((x+1)*(N-y)));
      |                                  ~~^~~
soccer.cpp:103:30: warning: 'x' may be used uninitialized in this function [-Wmaybe-uninitialized]
  103 |         res = max(res,N*N-((N-x)*(y+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...