제출 #906297

#제출 시각아이디문제언어결과실행 시간메모리
906297vjudge1Vision Program (IOI19_vision)C++17
59 / 100
9 ms1592 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() #define F first #define S second #define pb push_back typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; int one,zero; // vi add(vi src, int v){ // vi res; // int cin = zero; // rep(i,0,sz(src)){ // vi inp = {src[i], cin}; // if(v&(1<<i)) inp.pb(one); // // cout<<"inps:"; // // for(int x: inp)cout<<' '<<x; // // cout<<endl; // res.pb(add_xor(inp)); // if(sz(inp)==3){ // vi outs = {add_and({inp[0],inp[1]}),add_and({inp[1],inp[2]}),add_and({inp[0],inp[2]})}; // cin=add_or(outs); // }else{ // cin=add_and(inp); // } // } // return res; // } // vi negate(vi src){ // vi res; // rep(i,0,sz(src)) res.pb(add_not(src[i])); // return add(res,1); // } vi add(vi a, vi b){ vi res; int cin = zero; rep(i,0,max(sz(a),sz(b))){ vi inp = {cin}; if(i<sz(a)) inp.pb(a[i]); if(i<sz(b)) inp.pb(b[i]); res.pb(add_xor(inp)); if(sz(inp)==3){ vi outs = {add_and({inp[0],inp[1]}),add_and({inp[1],inp[2]}),add_and({inp[0],inp[2]})}; cin=add_or(outs); }else{ cin=add_and(inp); } } return res; } void construct_network(int H, int W, int K) { // setup vi allcells; rep(i,0,H)rep(j,0,W)allcells.pb(i*W+j); one = add_or(allcells); zero = add_not(one); // vi inds= add({one,zero,one,zero},{one,one}); // cout<<"at:";for(int x : inds) cout<<' '<<x; // cout<<endl; // return; vi counter(10,zero); int active = zero; rep(i,0,H){ vi onrow; rep(j,0,W) onrow.pb(i*W+j); active = add_xor({active, add_xor(onrow)}); // cout<<"active row "<<i<<": "<<active<<endl; counter = add(counter,{active}); } active = zero; rep(j,0,W){ vi oncol; rep(i,0,H) oncol.pb(i*W+j); active = add_xor({active, add_xor(oncol)}); // cout<<"active col "<<j<<": "<<active<<endl; counter = add(counter,{active}); } // cout<<"result:"; // for(int x : counter) cout<<' '<<x; // cout<<endl; rep(i,0,sz(counter)){ if(K&(1<<i)){ counter[i]=add_not(counter[i]); } } add_not(add_or(counter)); }
#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...