제출 #259743

#제출 시각아이디문제언어결과실행 시간메모리
259743peti1234Vision Program (IOI19_vision)C++17
29 / 100
12 ms1408 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; #define rep(n) for (int i=0; i<n; i++) #define jrep(n) for (int j=0; j<n; j++) bool valasz[50005]; const int c=202, f=25; int pos, ua, nua, v[c], px[c], seg[c], seg2[c], sor[c], oszlop[c], nagy[c], kis[c], ans[c], id; vector<int> sol; void pb(int a) { sol.push_back(a); } int add(int a) { pos++; if (a==1) add_or(sol); if (a==2) add_and(sol); if (a==3) add_xor(sol); if (a==4) add_not(ua); /* cout << sol.size() << " " << a << "\n"; rep(sol.size()) cout << sol[i] << " "; cout << "\n"; */ if (a==4) valasz[pos]=!(valasz[ua]); else { int si=sol.size(), db=0; rep(si) db+=valasz[sol[i]]; if (a==1) valasz[pos]=(db>0); if (a==2) valasz[pos]=(db==si); if (a==3) valasz[pos]=(db%2); } sol.clear(); return pos; } void calc(int n) { //cout << "ugyanaz\n"; int ff=min(n, f); rep(n) pb(v[i]); ua=add(3), nua=add(4); //cout << "bazdmeg " << valasz[ua] << "\n"; //cout << "prefix xor\n"; rep(n) { if (i) pb(px[i-1]); pb(v[i]); px[i]=add(3); } //cout << "nagysag\n"; for (int j=0; j<n; j+=f) { rep(n-j) pb(px[i]), pb(px[i+j]), seg[i]=add(2); rep(n-j) pb(seg[i]); nagy[j/f]=add(1); if (j) pb(nagy[j/f-1]), pb(nagy[j/f]), nagy[j/f-1]=add(3); } //cout << "mod\n"; rep(ff) { for (int j=i; j<n; j+=f) pb(v[j]); seg[i]=add(1); } //cout << "kis\n"; rep(ff) { if (!i) { rep(ff) pb(seg[i]); kis[0]=add(3), i++; if (i==ff) break; } jrep(ff-i) pb(seg[j]), pb(seg[j+i]), seg2[j]=add(2); jrep(ff-i) pb(seg2[j]); kis[i]=add(1); } } void construct_network(int n, int m, int k) { pos=n*m-1; //cout << "sor\n"; rep(n) { int p=m*i; rep(m) pb(p+i); v[i]=add(1); } calc(n); //cout << "melyiksor\n"; rep(n) { if (!i) { pb(ua); sor[i]=add(1), i++; if (n==1) break; } pb(nua), pb(kis[i%f]), pb(nagy[(i-1)/f]); sor[i]=add(2); } //rep(n) cout << "sor " << valasz[sor[i]] << "\n"; //cout << "oszlop\n"; rep(m) { int p=i; rep(n) pb(p+m*i); v[i]=add(1); } calc(m); //cout << "melyikoszlop\n"; rep(m) { if (!i) { pb(ua); oszlop[i]=add(1), i++; if (m==1) break; } pb(nua), pb(kis[i%f]), pb(nagy[(i-1)/f]); oszlop[i]=add(2); } //rep(m) cout << "oszlop " << valasz[oszlop[i]] << "\n"; //cout << "osszesitve\n"; rep(n) { int j=k-i; if (j>=0 && j<m) pb(sor[i]), pb(oszlop[j]), ans[id]=add(2), id++; //if (j>=0 && j<m) cout << "lehet " << i << " " << j << " " << valasz[sor[i]] << " " << valasz[oszlop[j]] << "\n"; } rep(id) pb(ans[i]); add(1); //cout << "vege\n" << pos << " " << valasz[pos] << "\n"; } /* int b1, b2, b3, x, y; int main() { cin >> b1 >> b2 >> b3 >> x >> y; valasz[x]=1, valasz[y]=1; construct_network(b1, b2, b3); //rep(pos+1) cout << i << " " << valasz[i] << endl; cout << valasz[pos] << "\n"; return 0; } */ /* 2 3 2 0 2 */ // talán jó
#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...