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;
typedef vector<int> vim;
int chk[40010];
vim ans;
int H, W;
void f(int K)
{
vim Ns;
vim x, y, z;
int i, j;
if (H+W-2<K) {
for (i=0; i<H*W; i++) Ns.push_back(i);
ans.push_back(add_xor(Ns));
return ;
}
for (i=0; i<H+W-1; i++) {
Ns={};
for (j=max(0, i-W+1); j<H&&(i-j)<W; j++) Ns.push_back(W*j+(i-j));
x.push_back(add_or(Ns));
}
for (i=-W+1; i<H; i++) {
Ns={};
for (j=max(i, 0); j<H&&j-i<W; j++) Ns.push_back(j*(W+1)-i);
y.push_back(add_or(Ns));
}
Ns={};
for (i=K; i<H+W-1; i++) Ns.push_back(x[i]);
int now=add_or(Ns);
z.push_back(add_and({now, x[0]}));
for (i=1; i<H+W-1; i++) {
if (i+K-1<H+W-1)now=add_xor({now, x[i+K-1]});
if (i>=K) now=add_or({now, x[i-K]});
z.push_back(add_and({now, x[i]}));
}
Ns={};
for (i=K; i<H+W-1; i++) Ns.push_back(y[i]);
now=add_or(Ns);
z.push_back(add_and({now, y[0]}));
for (i=1; i<H+W-1; i++) {
if (i+K-1<H+W-1)now=add_xor({now, y[i+K-1]});
if (i>=K) now=add_or({now, y[i-K]});
z.push_back(add_and({now, y[i]}));
}
ans.push_back(add_or(z));
}
void construct_network(int h, int w, int K) {
H=h, W=w;
f(K);
f(K+1);
ans[1]=add_not(ans[1]);
add_and(ans);
}
# | 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... |