Submission #376338

#TimeUsernameProblemLanguageResultExecution timeMemory
376338InternetPerson10Vision Program (IOI19_vision)C++14
100 / 100
89 ms8168 KiB
#include <bits/stdc++.h> #include "vision.h" using namespace std; vector<int> N1, N2, N1_2, N1_3, N1_4, N1_5, N1_6, N2_2, N2_3, N2_4, N2_5, N2_6, nums, ph, ph2; void construct_network(int H, int W, int K) { nums = {0, add_not(0)}; int BLANK = add_and(nums); for(int i = 0; i < H+W-1; i++) { vector<int>().swap(nums); for(int j = max(0, i+1-W); j < min(H, i+1); j++) { nums.push_back(j*W + i-j); // cout << i << ' ' << j << '\n'; } N1.push_back(add_xor(nums)); } for(int i = 0; i < H+W-1; i++) { vector<int>().swap(nums); for(int j = max(0, i+1-W); j < min(H, i+1); j++) { nums.push_back((H-j-1)*W + i-j); } N2.push_back(add_xor(nums)); } int X = N1.size(); // X = H + W - 1; X > K for(int i = 0; i < X+K; i++) { vector<int>().swap(nums); for(int j = max(0, i-K); j <= min(i, X-1); j++) { nums.push_back(N1[j]); } N1_2.push_back(add_xor(nums)); } for(int i = 0; i < X+K; i++) { vector<int>().swap(nums); for(int j = max(0, i-K); j <= min(i, X-1); j++) { nums.push_back(N2[j]); } N2_2.push_back(add_xor(nums)); } X = N1_2.size(); // X = H + W + K - 1; X > 2K for(int i = 0; i < X-2; i++) { vector<int>().swap(nums); nums.push_back(N1_2[i]); nums.push_back(add_not(N1_2[i+1])); nums.push_back(N1_2[i+2]); N1_3.push_back(add_and(nums)); } for(int i = 0; i < X-2; i++) { vector<int>().swap(nums); nums.push_back(N2_2[i]); nums.push_back(add_not(N2_2[i+1])); nums.push_back(N2_2[i+2]); N2_3.push_back(add_and(nums)); } K++; for(int i = 0; i <= X-2*K; i++) { vector<int>().swap(nums); nums.resize(2*K); for(int j = 0; j < 2*K; j++) nums[j] = N1_2[i+j]; N1_4.push_back(add_and(nums)); } for(int i = 0; i <= X-2*K; i++) { vector<int>().swap(nums); nums.resize(2*K); for(int j = 0; j < 2*K; j++) nums[j] = N2_2[i+j]; N2_4.push_back(add_and(nums)); } for(int i = 0; i <= X-K; i++) { vector<int>().swap(nums); nums.resize(K); for(int j = 0; j < K; j++) nums[j] = N1_2[i+j]; N1_5.push_back(add_and(nums)); } for(int i = 0; i <= X-K; i++) { vector<int>().swap(nums); nums.resize(K); for(int j = 0; j < K; j++) nums[j] = N2_2[i+j]; N2_5.push_back(add_and(nums)); } int good1 = add_or(N1_3), good2 = add_or(N2_3); if(N1_4.size()) N1_6.push_back(add_or(N1_4)); else N1_6.push_back(BLANK); ph.push_back(add_or(N1_2)); ph.push_back(add_or(N1_5)); ph.push_back(add_not(add_xor(N1_5))); N1_6.push_back(add_and(ph)); vector<int>().swap(ph); if(N2_4.size()) N2_6.push_back(add_or(N2_4)); else N2_6.push_back(BLANK); ph.push_back(add_or(N2_2)); ph.push_back(add_or(N2_5)); ph.push_back(add_not(add_xor(N2_5))); N2_6.push_back(add_and(ph)); vector<int>().swap(ph); int bad1 = add_or(N1_6), bad2 = add_or(N2_6); ph = {good1, good2}; ph2 = {bad1, bad2}; vector<int>().swap(nums); nums.push_back(add_or(ph)); nums.push_back(add_not(add_or(ph2))); add_and(nums); }
#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...