이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#ifndef SKY
#include "vision.h"
#endif // SKY
using namespace std;
#define N 210
#define ll long long
#define fs first
#define sc second
#define ii pair<int,int>
#define pb push_back
const int num_bit=9;
#ifdef SKY
vector<int>ask;
int add_not(int x)
{
int res=ask.size();
ask.pb((!ask[x]));
return res;
}
int add_and(vector<int>s)
{
assert(!s.empty());
int res=ask.size();
int val=1;
for(auto u:s)
val&=ask[u];
ask.pb(val);
return res;
}
int add_or(vector<int>s)
{
assert(!s.empty());
int res=ask.size();
int val=0;
for(auto u:s)
val|=ask[u];
ask.pb(val);
return res;
}
int add_xor(vector<int>s)
{
assert(!s.empty());
int res=ask.size();
int val=0;
for(auto u:s)
val^=ask[u];
ask.pb(val);
return res;
}
#endif // SKY
int bit_0,bit_1;
int solve(int pos,int x,int vt)
{
vector<int>them;
for(int i=0;i<vt;i++)
them.pb(bit_0);
them.pb(x);
for(int i=vt+1;i<num_bit;i++)
them.pb(add_and({them[i-1],pos+i-1}));
int res=add_xor({them[0],pos});
for(int i=1;i<num_bit;i++)
add_xor({them[i],pos+i});
return res;
}
int build(int n,vector<int>s,int id)
{
//cout<<n<<endl;
//for(auto u:s)cout<<ask[u]<<" ";cout<<endl;
vector<int>hoi;
for(auto u:s)
hoi.pb(u);
int kt=add_xor(hoi),copy_kt=kt;
kt=add_not(kt);
bit_0=add_and({kt,copy_kt});
for(int i=0;i<n;i++)
s[i]=add_and({s[i],kt});
for(int i=1;i<n;i++)
s[i]=add_xor({s[i],s[i-1]});
// for(auto u:s)cout<<ask[u]<<" ";cout<<endl;
int pos=add_and({bit_0});
for(int i=1;i<num_bit;i++)
add_and({bit_0});
for(int i=0;i<n;i++)
pos=solve(pos,s[i],0);
//for(int i=0;i<num_bit;i++)cout<<ask[pos+i]<<" ";cout<<endl;
return pos;
}
void construct_network(int n, int m, int k)
{
vector<int>s;
int pos[2];
//hàng
for(int i=0;i<n;i++)
{
vector<int>hoi;
for(int j=0;j<m;j++)
hoi.pb(i*m+j);
s.pb(add_or(hoi));
}
pos[0]=build(n,s,0);
//cột
s.clear();
for(int j=0;j<m;j++)
{
vector<int>hoi;
for(int i=0;i<n;i++)
hoi.pb(i*m+j);
s.pb(add_or(hoi));
}
pos[1]=build(m,s,1);
// cout<<pos[0]<<" "<<pos[1]<<endl;
bit_1=add_not(bit_0);
int vt=pos[0];
for(int i=0;i<num_bit;i++)
vt=solve(vt,pos[1]+i,i);
//for(int i=0;i<num_bit;i++)cout<<ask[vt+i]<<" ";cout<<endl;
int pos_k=add_and({(k%2==1 ? bit_1 : bit_0)});
for(int i=1;i<num_bit;i++)
add_and({((k>>i)&1) ? bit_1 : bit_0});
vector<int>hoi;
for(int i=0;i<num_bit;i++)
hoi.pb(add_xor({vt+i,pos_k+i}));
add_not(add_or(hoi));
}
#ifdef SKY
int main()
{
freopen("A.inp","r",stdin);
freopen("A.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int n,m,k;
cin>>n>>m>>k;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
int u;
cin>>u;
ask.pb(u);
}
construct_network(n,m,k);
cout<<ask.back();
return 0;
}
#endif
# | 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... |