Submission #844970

# Submission time Handle Problem Language Result Execution time Memory
844970 2023-09-06T10:15:21 Z JoksimKaktus Soccer Stadium (IOI23_soccer) C++17
0 / 100
0 ms 344 KB
#include "soccer.h"
#include "bits/stdc++.h"

using namespace std;

int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
    int n,s,e,w;
    n = N;
    s = 0;
    w = N;
    e = 0;
    int num = 0;
    for(int i = 0; i < N;i++){
        int con = 0;
        for(int j = 0;j < N;j++){
            if(F[i][j] == 1){
                num++;
                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 j = 0;j < N;j++){
        if(F[n][j] == 0){
            for(int i = 0;i < N;i++){
                if(F[s][i] == 0){
                    bool way1 = true;
                    bool way1m = true;
                    bool way2 = true;
                    bool way2m = true;
                    for(int k = j; k <= i;k++){
                        if(F[n][k] == 1){
                            way1 = false;
                            break;
                        }
                    }
                    for(int k = j; k >= i;k--){
                        if(F[n][k] == 1){
                            way1m = false;
                            break;
                        }
                    }
                    if(way1 || (way1m && (j > i))){
                        for(int k = n;k <= s;k++){
                            if(F[k][i] == 1){
                                way1 = false;
                                break;
                            }
                        }
                        for(int k = n;k >= s;k--){
                            if(F[k][i] == 1){
                                way1m = false;
                                break;
                            }
                        }
                    }
                    if(j < i){
                        way1m = false;
                    }
                    if(!way1 && !way1m){
                        for(int k = n;k <= s;k++){
                            if(F[k][j] == 1){
                                way2 = false;
                                break;
                            }
                        }
                        for(int k = n;k >= s;k--){
                            if(F[k][j] == 1){
                                way2m = false;
                                break;
                            }
                        }
                        if(way2 || (way2m && (j > i))){
                            for(int k = j; k <= i;k++){
                                if(F[s][k] == 1){
                                    way2 = false;
                                    break;
                                }
                            }
                            for(int k = j; k >= i;k--){
                                if(F[s][k] == 1){
                                    way2m = false;
                                    break;
                                }
                            }
                            if(j < i){
                                way2m = false;
                            }
                            if(!way2 && !way2m){
                                return 1;
                            }
                        }else{
                            return 1;
                        }
                    }
                }
            }
        }
    }
    for(int j = 0;j < N;j++){
        if(F[j][w] == 0){
            for(int i = 0;i < N;i++){
                if(F[i][e] == 0){
                    bool way1 = true;
                    bool way1m = true;
                    bool way2 = true;
                    bool way2m = true;
                    for(int k = j; k <= i;k++){
                        if(F[k][w] == 1){
                            way1 = false;
                            break;
                        }
                    }
                    for(int k = j; k >= i;k--){
                        if(F[k][w] == 1){
                            way1m = false;
                            break;
                        }
                    }
                    if(way1 || (way1m && (j > i))){
                        for(int k = w;k <= e;k++){
                            if(F[k][i] == 1){
                                way1 = false;
                                break;
                            }
                        }
                        for(int k = w;k >= e;k--){
                            if(F[k][i] == 1){
                                way1m = false;
                                break;
                            }
                        }
                    }if(j < i){
                        way1m = false;
                    }
                    if(!way1 && !way1m){
                        for(int k = w;k <= e;k++){
                            if(F[k][j] == 1){
                                way2 = false;
                                break;
                            }
                        }
                        for(int k = w;k >= e;k--){
                            if(F[k][j] == 1){
                                way2m = false;
                                break;
                            }
                        }
                        if(way2 || (way2m && (j > i))){
                            for(int k = j; k <= i;k++){
                                if(F[k][e] == 1){
                                    way2 = false;
                                    break;
                                }
                            }
                            for(int k = j; k >= i;k--){
                                if(F[k][e] == 1){
                                    way2m = false;
                                    break;
                                }
                            }
                            if(j < i){
                                way2m = false;
                            }
                            if(!way2 && !way2m){
                                return 1;
                            }
                        }else{
                            return 1;
                        }
                    }
                }
            }
        }
    }
    return N*N-num;
}


# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB partial
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Incorrect 0 ms 344 KB wrong
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Incorrect 0 ms 344 KB wrong
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB partial
2 Correct 0 ms 344 KB ok
3 Incorrect 0 ms 344 KB wrong
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB partial
2 Correct 0 ms 344 KB ok
3 Incorrect 0 ms 344 KB wrong
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB partial
2 Correct 0 ms 344 KB ok
3 Incorrect 0 ms 344 KB wrong
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Partially correct 0 ms 344 KB partial
2 Correct 0 ms 344 KB ok
3 Incorrect 0 ms 344 KB wrong
4 Halted 0 ms 0 KB -