#include<bits/stdc++.h>
#include "vision.h"
using namespace std;
using ll = int;
int ind;
int not_greater_left (int H, int W, int S){
S ++;
ll i, lo, hi, lo_ind1, r, lo_ind2, j;
vector < int > v[502];
vector < int > answer;
ind = H * W;
lo = 1e9;
hi= 0;
for (i = 0; i < H; i ++) {
for ( j = 0; j < W; j ++) {
r = j - i + H;
lo = min(lo, r);
hi = max(hi, r);
v[r].push_back(i * W + j);
}
}
lo_ind1 = -1;
for (i = lo; i <= hi; i ++) {
if ( lo_ind1 == -1) {
lo_ind1 = add_or(v[i]);
}
else add_or(v[i]);
}
lo_ind2 = -1;
for (i = lo; i <= hi; i ++) {
if ( lo_ind2 == -1) {
lo_ind2 = add_xor(v[i]);
}
else add_xor(v[i]);
}
for (i = lo; i + (S) - 1 <= hi; i ++) {
vector < int > q;
for ( j = i; j <= i + (S) - 1; j ++) {
q.push_back(lo_ind2 + (j - lo));
}
ind = add_xor(q);
q.clear();
add_not(ind);
for ( j = i; j <= i + (S) - 1; j ++) {
q.push_back(lo_ind1 + (j - lo));
}
ind = add_or(q);
q.clear();
q.push_back(ind - 1);
q.push_back(ind);
ind = add_and(q);
answer.push_back(ind);
ind ++;
}
return add_or(answer);
}
int not_greater_right (int H, int W, int S){
S ++;
ll i, lo, hi, lo_ind1, r, lo_ind2, j;
vector < int > v[502];
vector < int > answer;
ind = H * W;
lo = 1e9;
hi= 0;
for (i = 0; i < H; i ++) {
for ( j = 0; j < W; j ++) {
r = i + j ;
lo = min(lo, r);
hi = max(hi, r);
v[r].push_back(i * W + j);
}
}
lo_ind1 = -1;
for (i = lo; i <= hi; i ++) {
if ( lo_ind1 == -1) {
lo_ind1 = add_or(v[i]);
}
else {
add_or(v[i]);
}
}
lo_ind2 = -1;
for (i = lo; i <= hi; i ++) {
if ( lo_ind2 == -1) {
lo_ind2 = add_xor(v[i]);
}
else {
add_xor(v[i]) ;
}
}
for (i = lo; i + (S) - 1 <= hi; i ++) {
vector < int > q;
for ( j = i; j <= i + (S) - 1; j ++) {
q.push_back(lo_ind2 + (j - lo));
}
ind = add_xor(q);
q.clear();
add_not(ind);
q.clear();
for ( j = i; j <= i + (S) - 1; j ++) {
q.push_back(lo_ind1 + (j - lo));
}
ind = add_or(q);
q.clear();
q.push_back(ind - 1);
q.push_back(ind);
ind = add_and(q);
answer.push_back(ind);
}
return add_or(answer);
}
void construct_network(int H, int W, int K) {
// left
int a, b, c, d;
vector < int > q;
a = not_greater_left(H, W, K - 1);
b = not_greater_left(H, W, K);
c = not_greater_right(H, W, K - 1);
d = not_greater_right(H, W, K);
a = add_not(a);
c = add_not(c);
q.push_back(a);
q.push_back(b);
add_and(q);
q.clear();
q.push_back(c);
q.push_back(d);
ind = add_and(q);
q.clear();
q.push_back(ind);
q.push_back(ind - 1);
ind = add_or(q);
q.clear();
q.push_back(b);
q.push_back(d);
q.push_back(ind);
add_and(q);
}
# | 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... |