Submission #478391

#TimeUsernameProblemLanguageResultExecution timeMemory
478391blueVision Program (IOI19_vision)C++17
73 / 100
59 ms5316 KiB
#include "vision.h" #include <vector> #include <iostream> using namespace std; int check(int H, int W, int K) //check if dist <= K { vector<int> main_list[450]; vector<int>* opp_list = (new vector<int>[500] + 225); for(int i = 0; i < H*W; i++) { main_list[i/W + int(i%W)].push_back(i); opp_list[i/W - int(i%W)].push_back(i); } int main_onecell[450]; int main_twocell[450]; int main_block[450]; vector<int> main_check; for(int d = 0; d <= H-1 + W-1; d++) { main_onecell[d] = add_or(main_list[d]); main_twocell[d] = add_and({main_onecell[d], add_not(add_xor(main_list[d]))}); } for(int d = 0; d+K <= H-1 + W-1; d++) { vector<int> lst; vector<int> twocellcheck; for(int d1 = d; d1 <= d+K; d1++) { lst.push_back(main_onecell[d1]); twocellcheck.push_back(main_twocell[d1]); } twocellcheck.push_back(add_and({add_or(lst), add_not(add_xor(lst))})); main_block[d] = add_or(twocellcheck); main_check.push_back(main_block[d]); } int* opp_onecell = new int[450] + 225; int* opp_twocell= new int[450] + 225; int* opp_block = new int[450] + 225; vector<int> opp_check; // cerr << "check\n"; for(int d = 0 - (W-1); d <= (H-1) - 0; d++) { // cerr << "d = " << d << '\n'; opp_onecell[d] = add_or(opp_list[d]); opp_twocell[d] = add_and({opp_onecell[d], add_not(add_xor(opp_list[d]))}); } for(int d = 0 - (W-1); d+K <= (H-1) - 0; d++) { vector<int> lst; vector<int> twocellcheck; for(int d1 = d; d1 <= d+K; d1++) { lst.push_back(opp_onecell[d1]); twocellcheck.push_back(opp_twocell[d1]); } twocellcheck.push_back(add_and({add_or(lst), add_not(add_xor(lst))})); opp_block[d] = add_or(twocellcheck); opp_check.push_back(opp_block[d]); } return add_and({add_or(main_check), add_or(opp_check)}); } void construct_network(int H, int W, int K) { if(K == 1) check(H, W, K); else add_and({check(H, W, K), add_not(check(H, W, K-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...
#Verdict Execution timeMemoryGrader output
Fetching results...