답안 #594710

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
594710 2022-07-12T20:52:54 Z Deepesson Vision Program (IOI19_vision) C++17
0 / 100
6 ms 4436 KB
#include <bits/stdc++.h>

void construct_network(int H, int W, int K);

int add_and(std::vector<int> Ns);

int add_or(std::vector<int> Ns);

int add_xor(std::vector<int> Ns);

int add_not(int N);

int tiles[505][505];

void plotar_tiles(int H,int W){
    for(int i=0;i!=H;++i){
        for(int j=0;j!=W;++j){
            tiles[i][j]=(i*W)+j;
        }
    }
}


///Ideia: Caso o AND desses 2 caras sejam positivos a conexao eh invalida
std::vector<int> gerar_lista_dist(int H,int W,int a,int b,int K){
    std::vector<int> queue;
    queue.push_back(tiles[a][b]);
    for(int i=0;i!=H;++i){
        for(int j=0;j!=W;++j){
            int d = abs(i-a)+abs(j-b);
            if(d!=K)queue.push_back(tiles[i][j]);
        }
    }
    return queue;
}

void construct_network(int H, int W, int K) {
    plotar_tiles(H,W);
	///Min(H,W) == 1
	if(std::min(H,W)==1){
        if(H==1){
            int count=0;
            for(int i=0;i!=W;++i){
                int esperado = i+K;
                if(esperado>=W)break;
                std::vector<int> v;
                v.push_back(tiles[0][i]);
                v.push_back(tiles[0][esperado]);
                add_and(v);
                ++count;
            }
            std::vector<int> orzao;
            for(int i=0;i!=count;++i)orzao.push_back(H*W+i);
            add_or(orzao);
        }else {
            assert(W==1);
            int count=0;
            for(int i=0;i!=H;++i){
                int esperado = i+K;
                if(esperado>=H)break;
                std::vector<int> v;
                v.push_back(tiles[i][0]);
                v.push_back(tiles[esperado][0]);
                add_and(v);
                ++count;
            }
            std::vector<int> orzao;
            for(int i=0;i!=count;++i)orzao.push_back(H*W+i);
            add_or(orzao);
        }
	}else if(H*W<=10000-5){
	    int count=0;
        for(int i=0;i!=H;++i){
            for(int j=0;j!=W;++j){
                if(i==H-1&&j==W-1)continue;
                std::vector<int> res = gerar_lista_dist(H,W,i,j,K);
                add_and(res);
                ++count;
            }
        }
        std::vector<int> orzao;
        for(int i=0;i!=count;++i)orzao.push_back(H*W+i);
        add_or(orzao);
        add_not(H*W+count);
	}{///Pixel no canto superior esquerdo
        std::vector<int> lista;
        for(int i=0;i!=H;++i)
            for(int j=0;j!=W;++j){
                if(i+j==K){
                    lista.push_back(tiles[i][j]);
                }
            }
        add_or(lista);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB on inputs (0, 1), (0, 2), expected 0, but computed 1
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB on inputs (0, 1), (0, 2), expected 0, but computed 1
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB on inputs (0, 1), (0, 2), expected 0, but computed 1
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB on inputs (0, 1), (0, 2), expected 0, but computed 1
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB on inputs (0, 1), (0, 3), expected 0, but computed 1
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 6 ms 4436 KB WA in grader: Too many inputs
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 596 KB on inputs (80, 199), (81, 199), expected 1, but computed 0
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB on inputs (0, 1), (0, 2), expected 0, but computed 1
3 Halted 0 ms 0 KB -