제출 #286203

#제출 시각아이디문제언어결과실행 시간메모리
286203MKopchevVision Program (IOI19_vision)C++14
100 / 100
23 ms1788 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; int pointer; int n,m; int ask(int x,int y) { return (x-1)*m+y-1; } vector<int> bits; int SZ; int mem_zero; void add(int where) { int naum=where; for(int i=0;i<SZ;i++) { int new_bits=add_xor({naum,bits[i]}); int new_naum=add_and({naum,bits[i]}); bits[i]=new_bits; naum=new_naum; } } void add_zero() { pointer=add_xor({0,0}); bits.push_back(pointer); } void construct_network(int H,int W,int K) { n=H; m=W; pointer=n*m-1; bits={}; SZ=0; while((1<<SZ)<=n+m)SZ++; for(int i=0;i<SZ;i++) add_zero(); mem_zero=bits[0]; int cur=mem_zero; for(int i=1;i<=n;i++) { vector<int> to_ask={cur}; for(int j=1;j<=m;j++) { to_ask.push_back(ask(i,j)); } pointer=add_xor(to_ask); cur=pointer; add(cur); } cur=mem_zero; for(int j=1;j<=m;j++) { vector<int> to_ask={cur}; for(int i=1;i<=n;i++) { to_ask.push_back(ask(i,j)); } pointer=add_xor(to_ask); cur=pointer; add(cur); } vector<int> to_ret={}; for(int i=0;i<SZ;i++) if((K&(1<<i)))to_ret.push_back(bits[i]); else to_ret.push_back(add_not(bits[i])); add_and(to_ret); }
#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...