Submission #1154716

#TimeUsernameProblemLanguageResultExecution timeMemory
1154716weakweakweakVision Program (IOI19_vision)C++20
44 / 100
38 ms6488 KiB
#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, 11, 13, 17, 19, 23, 29}; vector<int> chp; for (int p : prime) { if (K % p) { if (chp.size() < 5) chp.push_back(p); } } int id = H*W-1; vector<int> chpid; for (int p : chp) { vector<int> rs[30], rs2[30]; 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-1; r1++) { int r2 = (r1 + r) %p, r3 = 29; // 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); } swap(rs, rs2); } if (ids.empty()) continue; add_or(ids); id++; chpid.push_back(id); } // cout << id << '\n'; add_and(chpid); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...