#include "vision.h"
#include <bits/stdc++.h>
using namespace std;
void construct_network(int H, int W, int K) {
if ( H * W <= 900) {
int id = H*W-1;
vector<int > finid;
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
vector<int> v1;
for (int i2 = 0; i2 < H; i2++) for (int j2 = 0; j2 < W; j2++) {
if (abs(i2-i) + abs(j2-j) == K) v1.push_back(i2*W+j2);
}
if (v1.empty()) continue;
add_or(v1); id++;
add_and({id, i*W+j});id++;
finid.push_back(id);
}
}
add_or(finid);
return;
}
vector<int> prime = {2, 3, 5, 7, 17, 23, 31, 127, 391};
vector<int> chp;
for (int p : prime) {
if (K % p and chp.size() < 5) {
chp.push_back(p);
}
}
// 29 17 51 89
int id = H*W-1;
vector<int> chpid;
for (int p : chp) {
vector<int> rs[400], rs2[400];
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
rs[(i+j) % p] . push_back(i*W + j);
rs2[((i-j)%p+p)%p]. push_back(i*W + j);
}
}
int r = K % p;
vector<int> ids;
for (int t = 0; t < 2; t++) {
for (int r1 = 0; r1 < p; r1++) {
int r2 = (r1 + r) %p, r3 = 399;
// if (r2 >= p) continue;
if (rs[r1].empty() or (rs[r2].empty() and rs[r3].empty())) continue;
auto tmp = rs[r2];
tmp.insert(tmp.end(), rs[r3].begin(), rs[r3].end());
add_or(rs[r1]); id++;
add_or(tmp); id++;
add_and({id-1, id});id++;
ids.push_back(id);
}
for (int j = 0; j < 400; j++) rs[j] = rs2[j];
}
if (ids.empty()) continue;
add_or(ids); id++;
chpid.push_back(id);
}
// cout << id << '\n';
add_and(chpid);
}
# | 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... |