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 x first
#define y second
using namespace std;
typedef long long ll;
typedef pair <int,int> pi;
int n,m,k,pl;
int ad[405],su[405],adi[405],sui[405];
int ad_ori[405],su_ori[405];
int ad_or[405],su_or[405];
vector <int> adv[405], suv[405];
vector <int> mo;
vector <int> check;
vector <int> check2;
int f(int x,int y) {
return x*m+y;
}
int dist(int x1,int y1,int x2,int y2) {
return abs(x1-x2)+abs(y1-y2);
}
void construct_network(int H, int W, int K) {
n = H, m = W, k = K;
int sx = -1,sy,st = n*m,en = n*m;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
suv[i-j+m].push_back(f(i,j));
adv[i+j+1].push_back(f(i,j));
}
}
for(int i = 1;i < n+m;i++) {
su[i] = en;
sui[i] = add_or(suv[i]); en++;
}
for(int i = 1;i < n+m;i++) {
ad[i] = en;
adi[i] = add_or(adv[i]); en++;
}
for(int i = 1;i < n+m;i++) {
if(i > k) {
check.push_back(en);
add_and({su[i],su_or[i-k]}); en++;
}
if(i == 1) {
su_or[i] = su[i];
su_ori[i] = sui[i];
}
else {
su_or[i] = en;
su_ori[i] = add_or({su_or[i-1],su[i]}); en++;
}
}
for(int i = 1;i < n+m;i++) {
if(i > k) {
check.push_back(en);
add_and({ad[i],ad_or[i-k]}); en++;
}
if(i == 1) {
ad_or[i] = ad[i];
ad_ori[i] = adi[i];
}
else {
ad_or[i] = en;
ad_ori[i] = add_or({ad_or[i-1],ad[i]}); en++;
}
}
memset(ad_or,0,sizeof(ad_or));
memset(su_or,0,sizeof(su_or));
for(int i = 1;i < n+m;i++) {
if(i > k+1) {
check2.push_back(en);
add_and({su[i],su_or[i-k-1]}); en++;
}
if(i == 1) {
su_or[i] = su[i];
su_ori[i] = sui[i];
}
else {
su_or[i] = en;
su_ori[i] = add_or({su_or[i-1],su[i]}); en++;
}
}
for(int i = 1;i < n+m;i++) {
if(i > k+1) {
check2.push_back(en);
add_and({ad[i],ad_or[i-k-1]}); en++;
}
if(i == 1) {
ad_or[i] = ad[i];
ad_ori[i] = adi[i];
}
else {
ad_or[i] = en;
ad_ori[i] = add_or({ad_or[i-1],ad[i]}); en++;
}
}
vector <int> ans;
for(int i : check) ans.push_back(i);
add_or(ans); en++;
ans.clear();
if(!(int)check2.size()) return;
for(int i : check2) ans.push_back(i);
add_or(ans); en++;
add_xor({en-2,en-1});
return;
}
Compilation message (stderr)
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:27:9: warning: unused variable 'sx' [-Wunused-variable]
27 | int sx = -1,sy,st = n*m,en = n*m;
| ^~
vision.cpp:27:17: warning: unused variable 'sy' [-Wunused-variable]
27 | int sx = -1,sy,st = n*m,en = n*m;
| ^~
vision.cpp:27:20: warning: unused variable 'st' [-Wunused-variable]
27 | int sx = -1,sy,st = n*m,en = n*m;
| ^~
# | 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... |