#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> bit_circuit(vector<int> row) {
int n = row.size();
vector<int> ret;
for (int bit = 0; (1<<bit) < n; bit++) {
vector<int> all_pair;
for (int i = 0; i+(1<<bit) < n; i++) {
vector<int> all_can;
for (int j = i+1; j < n; j++) {
if ((j-i)&(1<<bit)) all_can.push_back(row[j]);
}
all_pair.push_back(add_and({row[i], add_or(all_can)}));
}
ret.push_back(add_or(all_pair));
}
return ret;
}
void construct_network(int H, int W, int K) {
vector<int> row(H), col(W);
for (int i = 0; i < H; i++) {
vector<int> inp(W);
for (int j = 0; j < W; j++) inp[j] = i*W + j;
row[i] = add_or(inp);
}
for (int j = 0; j < W; j++) {
vector<int> inp(H);
for (int i = 0; i < H; i++) inp[i] = i*W + j;
col[j] = add_or(inp);
}
vector<int> row_bit = bit_circuit(row);
vector<int> col_bit = bit_circuit(col);
if (row_bit.size() < col_bit.size()) swap(row_bit, col_bit);
vector<int> carry = {-1};
vector<int> value;
for (int i = 0; i < max(row_bit.size(), col_bit.size()); i++) {
if (i < col_bit.size()) {
int value_node, carry_node;
if (carry.back() != -1) {
value_node = add_xor({row_bit[i], col_bit[i], carry[i]});
carry_node = add_or({add_and({row_bit[i], col_bit[i]}), add_and({row_bit[i], carry[i]}), add_and({col_bit[i], carry[i]})});
}
else {
value_node = add_xor({row_bit[i], col_bit[i]});
carry_node = add_and({row_bit[i], col_bit[i]});
}
value.push_back(value_node);
carry.push_back(carry_node);
} else {
int value_node, carry_node;
if (carry.back() != -1) {
value_node = add_xor({row_bit[i], carry[i]});
carry_node = add_and({row_bit[i], carry[i]});
} else {
value_node = row_bit[i];
carry_node = -1;
}
value.push_back(value_node);
carry.push_back(carry_node);
}
}
if (carry.back() != -1)value.push_back(carry.back());
vector<int> bit_match;
for (int i = 0; i < value.size(); i++) {
if ((K>>i)&1) bit_match.push_back(value[i]);
else bit_match.push_back(add_not(value[i]));
}
int final_answer = add_and(bit_match);
}
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
# | 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... |