This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 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... |