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>
#define pb push_back
#define mp make_pair
#define rr first
#define cc second
using namespace std;
typedef pair<int, int> pii;
int hh, ww, kk;
pii to_pair(int x){
return mp(x / ww, x % ww);
}
int to_linear(pii x){
return x.rr * ww + x.cc;
}
void construct_network(int H, int W, int K) {
// proj y
hh = H, ww = W, kk = K;
int one = add_or( {0, add_not(0)} ), zero = add_not(one);
vector<int> proj_hor, hor;
vector<int> proj_ver, ver;
int bitlen = 10;
vector<int> counter;
for (int i = 0; i < ww; i++){
vector<int> send;
for (int j = 0; j < hh; j++){
send.pb(j * ww + i);
}
proj_hor.pb(add_or(send));
}
for (int i = 0; i < hh; i++){
vector<int> send;
for (int j = 0; j < ww; j++){
send.pb(i * ww + j);
}
proj_ver.pb(add_or(send));
}
for (int i = 0; i < hh; i++){
vector<int> send_pre, send_suf;
for (int j = 0; j <= i; j++){
send_pre.pb(proj_ver[j]);
}
for (int j = i; j < hh; j++){
send_suf.pb(proj_ver[j]);
}
ver.pb( add_and({add_or(send_pre), add_or(send_suf)}) );
}
for (int i = 0; i < ww; i++){
vector<int> send_pre, send_suf;
for (int j = 0; j <= i; j++){
send_pre.pb(proj_hor[j]);
}
for (int j = i; j < ww; j++){
send_suf.pb(proj_hor[j]);
}
hor.pb( add_and({add_or(send_pre), add_or(send_suf)}) );
}
// initialize
for (int i = 0; i < bitlen; i++){
counter.pb(zero);
}
for (int j = 0; j < ww; j++){
int adder = hor[j];
for (int i = 0; i < bitlen; i++){
int tmp = counter[i];
counter[i] = add_xor({counter[i], adder});
adder = add_and({tmp, adder});
}
}
for (int j = 0; j < hh; j++){
int adder = ver[j];
for (int i = 0; i < bitlen; i++){
int tmp = counter[i];
counter[i] = add_xor({counter[i], adder});
adder = add_and({tmp, adder});
}
}
kk = kk + 2;
int last = one;
vector<int> kkbits;
for (int i = 0; i < bitlen; i++){
kkbits.pb(kk % 2);
kk /= 2;
}
for (int i = 0; i < bitlen; i++){
if (kkbits[i]){
last = add_and({last, counter[i]});
}
else{
last = add_and({last, add_not(counter[i]) });
}
}
}
# | 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... |