제출 #976422

#제출 시각아이디문제언어결과실행 시간메모리
976422salmonVision Program (IOI19_vision)C++14
0 / 100
8 ms1496 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; void construct_network(int H, int W, int K) { if(H * W == 2){ add_and({0,1}); return; } vector<int> Ns; Ns = {0, 1, 2}; int troo; int untroo; untroo = add_and(Ns); troo = add_not(untroo); vector<int> column; for(int i = 0; i < H; i++){ column.push_back(i * W); } vector<int> cond; for(int i = 0; i < W; i++){ cond.push_back(add_xor(column)); for(int j = 0; j < H; j++){ column[j]++; } } for(int i = 1; i < W; i++){ cond[i] = add_xor({cond[i], cond[i - 1]}); } vector<int> digit1,digit2; for(int i = 0; i < 3; i++){ digit1.push_back(add_xor(cond)); vector<int> temp = {cond[0]}; for(int j = 1; j < W; j++){ temp.push_back(add_and({cond[j], add_xor({cond[j], cond[j - 1]})}) ); } for(int j = 0; j < W; j++){ temp[j] = add_xor({temp[j],cond[j]}); } for(int j = 0; j < W/2; j++){ cond[j] = temp[j * 2 + 1]; } for(int j = 0; j < W/2 + 1; j++){ cond[j + W/2] = temp[j * 2]; } } vector<int> row; for(int i = 0; i < W; i++){ row.push_back(i); } cond.clear(); for(int i = 0; i < H; i++){ cond.push_back(add_xor(row)); for(int j = 0; j < W; j++){ row[j] += W; } } for(int i = 1; i < H; i++){ cond[i] = add_xor({cond[i], cond[i - 1]}); } for(int i = 0; i < 3; i++){ digit2.push_back(add_xor(cond)); vector<int> temp = {cond[0]}; for(int j = 1; j < H; j++){ temp.push_back(add_and({cond[j], add_xor({cond[j], cond[j - 1]})}) ); } for(int j = 0; j < H; j++){ temp[j] = add_xor({temp[j],cond[j]}); } for(int j = 0; j < H/2; j++){ cond[j] = temp[j * 2 + 1]; } for(int j = 0; j < H/2 + 1; j++){ cond[j + W/2] = temp[j * 2]; } } vector<int> digit; int carry = untroo; for(int i = 0; i < 3; i++){ digit.push_back(add_xor({carry, digit1[i], digit2[i]})); carry = add_or({add_and({carry, digit1[i]}), add_and({digit2[i], digit1[i]}), add_and({carry, digit2[i]}) }); } vector<int> compare; for(int i = 0; i < 3; i++){ if(K%2 == 1) compare.push_back(add_not(add_xor({digit[i],troo})) ); else compare.push_back(add_not(add_xor({digit[i],untroo})) ); K/=2; } add_and(compare); }
#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...