#include "vision.h"
#include <cassert>
using namespace std;
int log2(int n){
int res = 0, tres = 1;
while(tres < n){
tres <<= 1;
res++;
}
return res;
}
void construct_network(int H, int W, int K) {
int log2H = log2(H);
int log2W = log2(W);
int z = add_and({0,1,2});
int o = add_not(z);
vector<int> Hind;
for (int divs = 0; divs < log2H; divs++) {
vector<int> tN;
for (int x = 0; x < H; ++x) {
for (int y = 0; y < W; ++y) {
if ((x >> divs) & 1) tN.push_back(x * W + y);
}
}
Hind.push_back(add_xor(tN));
}
for (int i = 0; i < log2W - log2H; ++i) {
Hind.push_back(add_and({z}));
}
vector<int> Wind;
for (int divs = 0; divs < log2W; divs++) {
vector<int> tN;
for (int x = 0; x < H; ++x) {
for (int y = 0; y < W; ++y) {
if ((y >> divs) & 1) tN.push_back(x * W + y);
}
}
Wind.push_back(add_xor(tN));
}
for (int i = 0; i < log2H - log2W; ++i) {
Wind.push_back(add_and({z}));
}
assert(Hind.size() == Wind.size());
int addbits = max(log2H, log2W);
vector<int> addeds, carries;
addeds.push_back(add_xor({Wind[0], Hind[0]}));
carries.push_back(add_and({Wind[0], Hind[0]}));
for (int i = 1; i < addbits; ++i) {
addeds.push_back(add_xor({Wind[i], Hind[i], carries[i - 1]}));
int o1 = add_and({Wind[i], Hind[i]});
int o2 = add_and({carries[i - 1], Hind[i]});
int o3 = add_and({Wind[i], carries[i - 1]});
carries.push_back(add_or({o1, o2, o3}));
}
addeds.push_back(add_and({carries.back()}));
vector<int> Kbits;
for (int i = 0; i < addeds.size(); ++i) {
if (K & 1) Kbits.push_back(add_and({o}));
else Kbits.push_back(add_and({z}));
K >>=1;
}
assert(K == 0);
vector<int> XORS;
for (int i = 0; i < addeds.size(); ++i) {
XORS.push_back(add_xor({addeds[i], Kbits[i]}));
}
vector<int> NOTS;
for (int i = 0; i < XORS.size(); ++i) {
NOTS.push_back(add_not(XORS[i]));
}
add_and(NOTS);
}
Compilation message
vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:62:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
62 | for (int i = 0; i < addeds.size(); ++i) {
| ~~^~~~~~~~~~~~~~~
vision.cpp:69:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
69 | for (int i = 0; i < addeds.size(); ++i) {
| ~~^~~~~~~~~~~~~~~
vision.cpp:73:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
73 | for (int i = 0; i < XORS.size(); ++i) {
| ~~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
2 ms |
340 KB |
Output is correct |
4 |
Correct |
2 ms |
340 KB |
Output is correct |
5 |
Correct |
2 ms |
340 KB |
Output is correct |
6 |
Correct |
2 ms |
340 KB |
Output is correct |
7 |
Correct |
2 ms |
340 KB |
Output is correct |
8 |
Correct |
3 ms |
596 KB |
Output is correct |
9 |
Correct |
3 ms |
596 KB |
Output is correct |
10 |
Correct |
3 ms |
544 KB |
Output is correct |
11 |
Correct |
3 ms |
596 KB |
Output is correct |
12 |
Correct |
4 ms |
544 KB |
Output is correct |
13 |
Correct |
1 ms |
212 KB |
Output is correct |
14 |
Correct |
1 ms |
212 KB |
Output is correct |
15 |
Correct |
1 ms |
212 KB |
Output is correct |
16 |
Correct |
0 ms |
212 KB |
Output is correct |
17 |
Correct |
1 ms |
256 KB |
Output is correct |
18 |
Correct |
1 ms |
212 KB |
Output is correct |
19 |
Correct |
1 ms |
288 KB |
Output is correct |
20 |
Correct |
10 ms |
1568 KB |
Output is correct |
21 |
Correct |
10 ms |
1620 KB |
Output is correct |
22 |
Correct |
11 ms |
1568 KB |
Output is correct |
23 |
Correct |
10 ms |
1620 KB |
Output is correct |
24 |
Correct |
10 ms |
1620 KB |
Output is correct |
25 |
Correct |
12 ms |
1624 KB |
Output is correct |
26 |
Correct |
13 ms |
1564 KB |
Output is correct |
27 |
Correct |
22 ms |
3360 KB |
Output is correct |
28 |
Correct |
21 ms |
3292 KB |
Output is correct |
29 |
Correct |
21 ms |
3264 KB |
Output is correct |
30 |
Correct |
21 ms |
3352 KB |
Output is correct |
31 |
Correct |
21 ms |
3324 KB |
Output is correct |
32 |
Incorrect |
1 ms |
212 KB |
WA in grader: Invalid index |
33 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
3284 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Incorrect |
2 ms |
340 KB |
on inputs (69, 17), (69, 18), expected 1, but computed 0 |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
212 KB |
on inputs (0, 1), (0, 2), expected 1, but computed 0 |
2 |
Halted |
0 ms |
0 KB |
- |