#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 2e2 + 5, M = 1e4 + 5;
int n, m, k;
int cnt_dia;
vector <int> query;
int offset_tmp;
int offset_original;
int zero, one;
int offset_maindia; // y - x
int offset_antidia; // y + x
int offset_k_maindia;
int offset_k_antidia;
int offset_kn1_maindia;
int offset_kn1_antidia;
int same_maindia;
int same_antidia;
int within_k;
int within_kn1;
void construct_network(int _n, int _m, int _k){
n = _n; m = _m; k = _k;
cnt_dia = n + m - 1;
offset_original = 0;
query = {offset_original + (0 * m + 0), add_not(offset_original + (0 * m + 0))};
zero = add_and(query);
one = add_or(query);
offset_maindia = one + 1 - (0 - (n - 1));
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query.clear();
for (int y = 0; y < m; y++){
int x = y - dia;
if (not (0 <= x and x < n)){
continue;
}
query.emplace_back(offset_original + (x * m + y));
}
add_xor(query);
}
offset_antidia = offset_maindia + ((m - 1) - 0) + 1 - (0 + 0);
for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){
query.clear();
for (int y = 0; y < m; y++){
int x = dia - y;
if (not (0 <= x and x < n)){
continue;
}
query.emplace_back(offset_original + (x * m + y));
}
add_xor(query);
}
offset_tmp = offset_antidia + ((n - 1) + (m - 1)) + 1 - (0 - (n - 1));
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query = {zero};
for (int dia2 = dia + 1; dia2 <= min(dia + k, (m - 1) - 0); dia2++){
query.emplace_back(offset_maindia + dia2);
}
add_or(query);
}
offset_k_maindia = offset_tmp + ((m - 1) - 0) + 1 - (0 - (n - 1));
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query = {offset_maindia + dia, offset_tmp + dia};
add_and(query);
}
offset_tmp = offset_k_maindia + ((m - 1) - 0) + 1 - (0 + 0);
for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){
query = {zero};
for (int dia2 = dia + 1; dia2 <= min(dia + k, (n - 1) + (m - 1)); dia2++){
query.emplace_back(offset_antidia + dia2);
}
add_or(query);
}
offset_k_antidia = offset_tmp + ((n - 1) + (m - 1)) + 1 - (0 + 0);
for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){
query = {offset_antidia + dia, offset_tmp + dia};
add_and(query);
}
offset_tmp = offset_k_antidia + ((n - 1) + (m - 1)) + 1 - (0 - (n - 1));
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query = {zero};
for (int dia2 = dia + 1; dia2 <= min(dia + (k - 1), (m - 1) - 0); dia2++){
query.emplace_back(offset_maindia + dia2);
}
add_or(query);
}
offset_kn1_maindia = offset_tmp + ((m - 1) - 0) + 1 - (0 - (n - 1));
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query = {offset_maindia + dia, offset_tmp + dia};
add_and(query);
}
offset_tmp = offset_kn1_maindia + ((m - 1) - 0) + 1 - (0 + 0);
for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){
query = {zero};
for (int dia2 = dia + 1; dia2 <= min(dia + (k - 1), (n - 1) + (m - 1)); dia2++){
query.emplace_back(offset_antidia + dia2);
}
add_or(query);
}
offset_kn1_antidia = offset_tmp + ((n - 1) + (m - 1)) + 1 - (0 + 0);
for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){
query = {offset_antidia + dia, offset_tmp + dia};
add_and(query);
}
offset_tmp = offset_kn1_maindia + ((n - 1) + (m - 1)) + 1 - (0);
query = {};
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query.emplace_back(offset_maindia + dia);
}
add_or(query);
same_maindia = add_not(offset_tmp + 0);
offset_tmp = same_maindia + 1 - (0);
query = {};
for (int dia = 0; dia <= (n - 1) + (m - 1); dia++){
query.emplace_back(offset_antidia + dia);
}
add_or(query);
same_antidia = add_not(offset_tmp + 0);
offset_tmp = same_antidia + 1 - (0);
query = {same_maindia};
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query.emplace_back(offset_k_maindia + dia);
}
add_or(query);
query = {same_antidia};
for (int dia = 0; dia <= (n - 1) + (m - 1); dia++){
query.emplace_back(offset_k_antidia + dia);
}
add_or(query);
query = {offset_tmp + 0, offset_tmp + 1};
within_k = add_and(query);
offset_tmp = within_k + 1 - (0);
query = {same_maindia};
for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){
query.emplace_back(offset_kn1_maindia + dia);
}
add_or(query);
query = {same_antidia};
for (int dia = 0; dia <= (n - 1) + (m - 1); dia++){
query.emplace_back(offset_kn1_antidia + dia);
}
add_or(query);
query = {offset_tmp + 0, offset_tmp + 1};
within_kn1 = add_and(query);
query = {within_k, add_not(within_kn1)};
add_and(query);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (1, 0), expected 1, but computed 0 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (1, 0), expected 1, but computed 0 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (1, 0), expected 1, but computed 0 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (1, 0), expected 1, but computed 0 |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
5 ms |
852 KB |
Output is correct |
3 |
Correct |
5 ms |
852 KB |
Output is correct |
4 |
Correct |
7 ms |
980 KB |
Output is correct |
5 |
Correct |
1 ms |
464 KB |
Output is correct |
6 |
Correct |
4 ms |
724 KB |
Output is correct |
7 |
Correct |
6 ms |
980 KB |
Output is correct |
8 |
Correct |
7 ms |
1104 KB |
Output is correct |
9 |
Correct |
2 ms |
340 KB |
Output is correct |
10 |
Correct |
4 ms |
596 KB |
Output is correct |
11 |
Correct |
6 ms |
852 KB |
Output is correct |
12 |
Correct |
5 ms |
852 KB |
Output is correct |
13 |
Correct |
7 ms |
980 KB |
Output is correct |
14 |
Correct |
7 ms |
980 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
4 ms |
724 KB |
Output is correct |
17 |
Correct |
7 ms |
880 KB |
Output is correct |
18 |
Correct |
5 ms |
852 KB |
Output is correct |
19 |
Correct |
6 ms |
980 KB |
Output is correct |
20 |
Correct |
7 ms |
1056 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 0), (1, 1), expected 1, but computed 0 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
8 ms |
1364 KB |
on inputs (96, 130), (143, 84), expected 0, but computed 1 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (1, 0), expected 1, but computed 0 |
7 |
Halted |
0 ms |
0 KB |
- |