이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |