#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
int h,w,k;
#define rrnn row_results_nn
#define crnn column_results_nn
bool bounds(int y, int x) {
if(y >= 0 && x >= 0 && y < h && x < w) return true;
return false;
}
void brute_force(int H, int W, int K) {
int index = H*W;
vector<int> and_indices;
for(int y = 0; y < H; y++) {
for(int x = 0; x < W; x++) {
vector<int> P;
for(int i = 0; i <= K; i++) {
int fdir = i;
int sdir = K-i;
if(bounds(y+fdir, x+sdir)) P.push_back((y+fdir)*W + x+sdir);
if(bounds(y+fdir, x-sdir)) P.push_back((y+fdir)*W + x-sdir);
if(bounds(y-fdir, x+sdir)) P.push_back((y-fdir)*W + x+sdir);
if(bounds(y-fdir, x-sdir)) P.push_back((y-fdir)*W + x-sdir);
}
if(P.size()) {
add_or(P);
index++;
and_indices.push_back(index);
add_and({y*W + x, index-1});
index++;
}
}
}
add_or(and_indices);
}
void construct_network(int H, int W, int K) {
h = H; w = W; k = K;
if(H <= 20 || W <= 20) {
brute_force(H,W,K);
return;
}
int index = H*W;
vector<int> column_results;
vector<int> row_results;
vector<int> column_results_nn;
int csz = column_results_nn.size()-1;
vector<int> row_results_nn;
int rsz = row_results_nn.size()-1;
for(int i = 0; i < W-1; i++) {
vector<int> to_xor;
for(int j = 0; j < H; j++) {
to_xor.push_back(W*j + i);
to_xor.push_back(W*j + i + 1);
}
add_xor(to_xor);
column_results_nn.push_back(index);
index++;
add_not(index-1);
column_results.push_back(index);
index++;
}
for(int i = 0; i < H-1; i++) {
vector<int> to_xor;
for(int j = 0; j < W; j++) {
to_xor.push_back(i*W + j);
to_xor.push_back((i+1)*W + j);
}
add_xor(to_xor);
row_results_nn.push_back(index);
index++;
add_not(index-1);
row_results.push_back(index);
index++;
}
add_and(column_results);
int lie_on_column = index++;
add_and(row_results);
int lie_on_row = index++;
add_not(column_results_nn[0]);
index++;
add_not(column_results_nn[2]);
index++;
add_and({column_results_nn[1], index-1, index-2});
int tgat_column_left = index++;
add_not(column_results_nn[csz]);
index++;
add_not(column_results_nn[csz-2]);
index++;
add_and({column_results_nn[csz-1], index-1, index-2});
int tgat_column_right = index++;
add_or({tgat_column_right, tgat_column_left});
int tgat_column = index++;
add_not(row_results_nn[0]);
index++;
add_not(row_results_nn[2]);
index++;
add_and({row_results_nn[1], index-1, index-2});
int tgat_row_left = index++;
add_not(row_results_nn[rsz]);
index++;
add_not(row_results_nn[rsz-2]);
index++;
add_and({row_results_nn[rsz-1], index-1, index-2});
int tgat_row_right = index++;
add_or({tgat_row_right, tgat_row_left});
int tgat_row = index++;
vector<int> column_ors;
vector<int> column_ands;
for(int i = 0; i < crnn.size()-5; i++) {
add_or({crnn[i], crnn[i+2], crnn[i+4]});
index++;
column_ors.push_back(index);
add_not(index-1);
index++;
add_and({crnn[i+1],crnn[i+3]});
column_ands.push_back(index);
index++;
}
int column101check = index;
for(int i = 0; i < column_ors.size(); i++) {
add_and({column_ors[i], column_ands[i]});
index++;
}
vector<int> column101fin;
for(int i = column101check; i < index; i++) {
column101fin.push_back(i);
}
add_or(column101fin);
int columnworking101 = index++;
vector<int> row_ors;
vector<int> row_ands;
for(int i = 0; i < rrnn.size()-5; i++) {
add_or({rrnn[i], rrnn[i+2], rrnn[i+4]});
index++;
row_ors.push_back(index);
add_not(index-1);
index++;
add_and({rrnn[i+1],rrnn[i+3]});
row_ands.push_back(index);
index++;
}
int row101check = index;
for(int i = 0; i < row_ors.size(); i++) {
add_and({row_ors[i], row_ands[i]});
index++;
}
cerr << "Row ors size : " << row_ors.size() << '\n';
vector<int> row101fin;
for(int i = row101check; i < index; i++) {
row101fin.push_back(i);
}
add_or(row101fin);
int rowworking101 = index++;
int start_sol = index;
vector<int> sol;
add_and({tgat_column, lie_on_row}); index++;
add_and({tgat_row, lie_on_column}); index++;
add_and({columnworking101, lie_on_row}); index++;
add_and({rowworking101, lie_on_column}); index++;
for(int i = start_sol; i < index; i++) {
sol.push_back(i);
}
add_or(sol);
}
Compilation message
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:119:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
119 | for(int i = 0; i < crnn.size()-5; i++) {
| ~~^~~~~~~~~~~~~~~
vision.cpp:130:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
130 | for(int i = 0; i < column_ors.size(); i++) {
| ~~^~~~~~~~~~~~~~~~~~~
vision.cpp:143:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
143 | for(int i = 0; i < rrnn.size()-5; i++) {
| ~~^~~~~~~~~~~~~~~
vision.cpp:154:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
154 | for(int i = 0; i < row_ors.size(); i++) {
| ~~^~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
404 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
404 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
348 KB |
Output is correct |
21 |
Correct |
1 ms |
348 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
0 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
436 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
404 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
348 KB |
Output is correct |
21 |
Correct |
1 ms |
348 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
0 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
436 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
1 ms |
348 KB |
Output is correct |
28 |
Incorrect |
0 ms |
344 KB |
WA in grader: Invalid index |
29 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
404 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
348 KB |
Output is correct |
21 |
Correct |
1 ms |
348 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
0 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
436 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
1 ms |
348 KB |
Output is correct |
28 |
Incorrect |
0 ms |
344 KB |
WA in grader: Invalid index |
29 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
1 ms |
344 KB |
Output is correct |
12 |
Correct |
1 ms |
348 KB |
Output is correct |
13 |
Correct |
1 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
344 KB |
Output is correct |
17 |
Correct |
0 ms |
348 KB |
Output is correct |
18 |
Correct |
1 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
348 KB |
Output is correct |
21 |
Correct |
0 ms |
348 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
348 KB |
Output is correct |
4 |
Incorrect |
0 ms |
348 KB |
WA in grader: Invalid index |
5 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
860 KB |
WA in grader: Invalid index |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
1 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
0 ms |
348 KB |
Output is correct |
10 |
Correct |
0 ms |
348 KB |
Output is correct |
11 |
Correct |
0 ms |
348 KB |
Output is correct |
12 |
Correct |
1 ms |
404 KB |
Output is correct |
13 |
Correct |
0 ms |
348 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
0 ms |
348 KB |
Output is correct |
16 |
Correct |
1 ms |
348 KB |
Output is correct |
17 |
Correct |
1 ms |
348 KB |
Output is correct |
18 |
Correct |
0 ms |
348 KB |
Output is correct |
19 |
Correct |
0 ms |
348 KB |
Output is correct |
20 |
Correct |
0 ms |
348 KB |
Output is correct |
21 |
Correct |
1 ms |
348 KB |
Output is correct |
22 |
Correct |
0 ms |
348 KB |
Output is correct |
23 |
Correct |
0 ms |
348 KB |
Output is correct |
24 |
Correct |
0 ms |
348 KB |
Output is correct |
25 |
Correct |
0 ms |
436 KB |
Output is correct |
26 |
Correct |
0 ms |
348 KB |
Output is correct |
27 |
Correct |
1 ms |
348 KB |
Output is correct |
28 |
Incorrect |
0 ms |
344 KB |
WA in grader: Invalid index |
29 |
Halted |
0 ms |
0 KB |
- |