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;
map<int, vector<int>> leva, desna;
map<int, int> ksorLeva, ksorDesna;
map<int, int> orLeva, orDesna;
int izracunajLevo(int K) {
vector<int> pitaj;
for(auto z : leva) {
int ksor = ksorLeva[z.first];
int ili = orLeva[z.first];
ksor = add_not(ksor);
pitaj.push_back(add_and({ksor, ili}));
}
for(auto z : leva) {
int prvi = z.first;
int drugi = z.first+K;
if(!leva.count(drugi))
continue;
vector<int> zaOr, zaXor;
for(int i = prvi; i <= drugi; ++i) {
zaOr.push_back(orLeva[i]);
zaXor.push_back(ksorLeva[i]);
}
prvi = add_or(zaOr);
drugi = add_not(add_xor(zaXor));
pitaj.push_back(add_and({prvi, drugi}));
}
return add_or(pitaj);
}
int izracunajDesno(int K) {
vector<int> pitaj;
for(auto z : desna) {
int ksor = ksorDesna[z.first];
int ili = orDesna[z.first];
ksor = add_not(ksor);
pitaj.push_back(add_and({ksor, ili}));
}
for(auto z : desna) {
int prvi = z.first;
int drugi = z.first+K;
if(!desna.count(drugi))
continue;
vector<int> zaOr, zaXor;
for(int i = prvi; i <= drugi; ++i) {
zaOr.push_back(orDesna[i]);
zaXor.push_back(ksorDesna[i]);
}
prvi = add_or(zaOr);
drugi = add_not(add_xor(zaXor));
pitaj.push_back(add_and({prvi, drugi}));
}
return add_or(pitaj);
}
int calc(int K) {
int prvi = izracunajLevo(K);
int drugi = izracunajDesno(K);
return add_and({prvi, drugi});
}
void construct_network(int H, int W, int K) {
for(int i = 0; i < H; ++i) {
for(int j = 0; j < W; ++j) {
int trenutni = i*W + j;
desna[i-j].push_back(trenutni);
leva[i+j].push_back(trenutni);
}
}
for(auto z : leva) {
ksorLeva[z.first] = add_xor(z.second);
orLeva[z.first] = add_or(z.second);
}
for(auto z : desna) {
ksorDesna[z.first] = add_xor(z.second);
orDesna[z.first] = add_or(z.second);
}
if(K == 1) {
calc(1);
return;
}
int prvi = K-1, drugi = K;
prvi = calc(prvi), drugi = calc(drugi);
add_xor({prvi, drugi});
}
# | 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... |