Submission #485863

#TimeUsernameProblemLanguageResultExecution timeMemory
485863ljubaVision Program (IOI19_vision)C++17
100 / 100
56 ms6212 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; map<int, vector<int>> leva, desna; map<int, int> ksorLeva, ksorDesna; map<int, int> orLeva, orDesna; int izracunajLevo(int K) { vector<int> pitaj; for(auto z : leva) { int ksor = ksorLeva[z.first]; int ili = orLeva[z.first]; ksor = add_not(ksor); pitaj.push_back(add_and({ksor, ili})); } for(auto z : leva) { int prvi = z.first; int drugi = z.first+K; if(!leva.count(drugi)) continue; vector<int> zaOr, zaXor; for(int i = prvi; i <= drugi; ++i) { zaOr.push_back(orLeva[i]); zaXor.push_back(ksorLeva[i]); } prvi = add_or(zaOr); drugi = add_not(add_xor(zaXor)); pitaj.push_back(add_and({prvi, drugi})); } return add_or(pitaj); } int izracunajDesno(int K) { vector<int> pitaj; for(auto z : desna) { int ksor = ksorDesna[z.first]; int ili = orDesna[z.first]; ksor = add_not(ksor); pitaj.push_back(add_and({ksor, ili})); } for(auto z : desna) { int prvi = z.first; int drugi = z.first+K; if(!desna.count(drugi)) continue; vector<int> zaOr, zaXor; for(int i = prvi; i <= drugi; ++i) { zaOr.push_back(orDesna[i]); zaXor.push_back(ksorDesna[i]); } prvi = add_or(zaOr); drugi = add_not(add_xor(zaXor)); pitaj.push_back(add_and({prvi, drugi})); } return add_or(pitaj); } int calc(int K) { int prvi = izracunajLevo(K); int drugi = izracunajDesno(K); return add_and({prvi, drugi}); } void construct_network(int H, int W, int K) { for(int i = 0; i < H; ++i) { for(int j = 0; j < W; ++j) { int trenutni = i*W + j; desna[i-j].push_back(trenutni); leva[i+j].push_back(trenutni); } } for(auto z : leva) { ksorLeva[z.first] = add_xor(z.second); orLeva[z.first] = add_or(z.second); } for(auto z : desna) { ksorDesna[z.first] = add_xor(z.second); orDesna[z.first] = add_or(z.second); } if(K == 1) { calc(1); return; } int prvi = K-1, drugi = K; prvi = calc(prvi), drugi = calc(drugi); add_xor({prvi, drugi}); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...