Submission #594723

# Submission time Handle Problem Language Result Execution time Memory
594723 2022-07-12T21:39:30 Z Deepesson Vision Program (IOI19_vision) C++17
44 / 100
13 ms 8844 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;
    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;
}

std::vector<std::vector<int>> lista;
std::vector<int> niveis[15][2];
void divide(int l,int r,int pos=0){
    if(l==r)return;
    int m = (l+r)/2;
    for(int i=l;i<=m;++i){
        for(auto&x:lista[i])
            niveis[pos][0].push_back(x);
    }
    for(int i=m+1;i<=r;++i){
        for(auto&x:lista[i])
            niveis[pos][1].push_back(x);
    }
    divide(l,m,pos+1);
    divide(m+1,r,pos+1);
}

int avanca_conquista(void){
    std::vector<int> andao;
    divide(0,lista.size()-1,0);
    for(int i=0;i!=15;++i){
        if(!niveis[i][0].size())break;
        int a = add_or(niveis[i][0]);
        int b = add_or(niveis[i][1]);
        std::vector<int> k = {a,b};
        andao.push_back(add_xor(k));
    }
    for(int i=0;i!=15;++i)for(int j=0;j!=2;++j)niveis[i][j].clear();
    lista.clear();
    return add_and(andao);
}

bool ok[505][505]={};
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(std::max(H,W)<=31){
	    int count=0;
        for(int i=0;i!=H;++i){
            for(int j=0;j!=W;++j){
                std::vector<int> res = gerar_lista_dist(H,W,i,j,K);
                if(!res.size())continue;
                ok[i][j]=1;
                add_or(res);
                ++count;
            }
        }
        std::vector<int> orzao;
        int anda=0;
        for(int i=0;i!=H;++i){
            for(int j=0;j!=W;++j){
                if(!ok[i][j])continue;
                std::vector<int> res;
                res.push_back(tiles[i][j]);
                res.push_back(H*W+anda);
                ++anda;
                add_and(res);
                orzao.push_back(H*W+count);
                ++count;
            }
        }
        add_or(orzao);
	}else if(K==1){
	    std::vector<int> orfinal;
        for(int i=0;i!=H-1;++i){
            for(int j=0;j!=W;++j){
                if(i&1)continue;
                std::vector<int> v;
                v.push_back(tiles[i][j]);
                v.push_back(tiles[i+1][j]);
                lista.push_back(v);
            }
        }
        orfinal.push_back(avanca_conquista());

        for(int i=0;i!=H-1;++i){
            for(int j=0;j!=W;++j){
                if(!(i&1))continue;
                std::vector<int> v;
                v.push_back(tiles[i][j]);
                v.push_back(tiles[i+1][j]);
                lista.push_back(v);
            }
        }
        orfinal.push_back(avanca_conquista());

        for(int i=0;i!=H;++i){
            for(int j=0;j!=W-1;++j){
                if((j&1))continue;
                std::vector<int> v;
                v.push_back(tiles[i][j]);
                v.push_back(tiles[i][j+1]);
                lista.push_back(v);
            }
        }
        orfinal.push_back(avanca_conquista());

        for(int i=0;i!=H;++i){
            for(int j=0;j!=W-1;++j){
                if(!(j&1))continue;
                std::vector<int> v;
                v.push_back(tiles[i][j]);
                v.push_back(tiles[i][j+1]);
                lista.push_back(v);
            }
        }
        orfinal.push_back(avanca_conquista());

        add_or(orfinal);
    }else{///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);
	}
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 0 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 0 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 0 ms 340 KB Output is correct
28 Correct 5 ms 724 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 0 ms 340 KB Output is correct
31 Correct 1 ms 340 KB Output is correct
32 Correct 2 ms 340 KB Output is correct
33 Correct 2 ms 468 KB Output is correct
34 Correct 5 ms 724 KB Output is correct
35 Correct 4 ms 596 KB Output is correct
36 Correct 2 ms 468 KB Output is correct
37 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 0 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 0 ms 340 KB Output is correct
28 Correct 5 ms 724 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 0 ms 340 KB Output is correct
31 Correct 1 ms 340 KB Output is correct
32 Correct 2 ms 340 KB Output is correct
33 Correct 2 ms 468 KB Output is correct
34 Correct 5 ms 724 KB Output is correct
35 Correct 4 ms 596 KB Output is correct
36 Correct 2 ms 468 KB Output is correct
37 Correct 1 ms 340 KB Output is correct
38 Incorrect 1 ms 468 KB on inputs (8, 61), (22, 97), expected 1, but computed 0
39 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 724 KB Output is correct
6 Correct 1 ms 724 KB Output is correct
7 Correct 1 ms 596 KB Output is correct
8 Correct 1 ms 596 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 1 ms 724 KB Output is correct
16 Correct 1 ms 724 KB Output is correct
17 Correct 0 ms 596 KB Output is correct
18 Correct 1 ms 596 KB Output is correct
19 Correct 1 ms 596 KB Output is correct
20 Correct 0 ms 596 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Incorrect 11 ms 1748 KB on inputs (0, 0), (0, 2), expected 0, but computed 1
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 13 ms 8844 KB WA in grader: Too many inputs
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 1 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 212 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 340 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 0 ms 340 KB Output is correct
26 Correct 1 ms 340 KB Output is correct
27 Correct 0 ms 340 KB Output is correct
28 Correct 5 ms 724 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 0 ms 340 KB Output is correct
31 Correct 1 ms 340 KB Output is correct
32 Correct 2 ms 340 KB Output is correct
33 Correct 2 ms 468 KB Output is correct
34 Correct 5 ms 724 KB Output is correct
35 Correct 4 ms 596 KB Output is correct
36 Correct 2 ms 468 KB Output is correct
37 Correct 1 ms 340 KB Output is correct
38 Incorrect 1 ms 468 KB on inputs (8, 61), (22, 97), expected 1, but computed 0
39 Halted 0 ms 0 KB -