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;
int n, m, k;
int toInd(int e, int s) {
return e * m + s;
}
vector<int> getDiagonal1(int ind) {
/// i + j = ind
vector<int> ret;
for(int i = 0; i < n; i++) {
int j = ind - i;
if(j < 0 || j >= m) continue;
ret.push_back(toInd(i, j));
}
return ret;
}
vector<int> getDiagonal2(int ind) {
/// i - j + m-1 = ind
vector<int> ret;
for(int i = 0; i < n; i++) {
int j = i + m - 1 - ind;
if(j < 0 || j >= m) continue;
ret.push_back(toInd(i, j));
}
return ret;
}
void construct_network(int H, int W, int K) {
n = H, m = W, k = K;
vector<int> ors1, ors2, xors1, xors2;
for(int i = 0; i < n + m-1; i++) {
ors1.push_back(add_or(getDiagonal1(i)));
ors2.push_back(add_or(getDiagonal2(i)));
xors1.push_back(add_xor(getDiagonal1(i)));
xors2.push_back(add_xor(getDiagonal2(i)));
}
/* vector<int> du1, du2;
for(int i = 0; i < n + m - 1; i++) {
du1.push_back(add_and({ors1[i], xors1[i]}));
du2.push_back(add_and({ors2[i], xors2[i]}));
}
int yraDu1 = add_or(du1);
int yraDu2 = add_or(du2);
*/
vector<int> yraDu1, yraDu2;
for(int i = 0; i < n + m-1; i++) {
vector<int> oras1, xoras1;
for(int j = 0; j <= k; j++) {
if(i + j >= n + m - 1) continue;
oras1.push_back(ors1[i+j]);
xoras1.push_back(xors1[i+j]);
}
int bendrasOras = add_or(oras1);
int bendrasXoras = add_xor(xoras1);
int notBendrasXoras = add_not(bendrasXoras);
yraDu1.push_back(add_and({bendrasOras, notBendrasXoras}));
}
for(int i = 0; i < n + m-1; i++) {
vector<int> oras2, xoras2;
for(int j = 0; j <= k; j++) {
if(j + i >= n + m - 1) continue;
oras2.push_back(ors2[i+j]);
xoras2.push_back(xors2[i+j]);
}
int bendrasOras = add_or(oras2);
int bendrasXoras = add_xor(xoras2);
int notBendrasXoras = add_not(bendrasXoras);
yraDu2.push_back(add_and({bendrasOras, notBendrasXoras}));
}
int artiPagal1 = add_or(yraDu1);
int artiPagal2 = add_or(yraDu2);
vector<int> lygiaiK1, lygiaiK2;
for(int i = 0; i+k < n+m-1; i++) {
lygiaiK1.push_back(add_and({ors1[i], ors1[i+k]}));
lygiaiK2.push_back(add_and({ors2[i], ors2[i+k]}));
}
int yraLygiai1 = add_or(lygiaiK1);
int yraLygiai2 = add_or(lygiaiK2);
int yraLygiai = add_or({yraLygiai1, yraLygiai2});
int yraArti = add_and({artiPagal1, artiPagal2});
int yraLygiaiK = add_and({yraLygiai, yraArti});
}
Compilation message (stderr)
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:95:9: warning: unused variable 'yraLygiaiK' [-Wunused-variable]
95 | int yraLygiaiK = add_and({yraLygiai, yraArti});
| ^~~~~~~~~~
# | 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... |