Submission #418667

#TimeUsernameProblemLanguageResultExecution timeMemory
418667dxz05Vision Program (IOI19_vision)C++14
58 / 100
79 ms11108 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 2e5 + 3e2; vector<int> vv[MAXN]; map<int, vector<int>> left_diagonal, right_diagonal; int solve(int H, int W, int K){ vector<int> Ns, vec; for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ if (left_diagonal[i + j].front() != i * W + j) continue; Ns.clear(); for (int x = 0; x < K; x++){ for (int y : left_diagonal[i + j - x]) Ns.push_back(y); } int ind1 = add_or(Ns), ind2 = add_xor(Ns); ind2 = add_not(ind2); int ind = add_and({ind1, ind2}); vec.push_back(ind); } } int lf = add_or(vec); vec.clear(); for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ if (right_diagonal[i - j].back() != i * W + j) continue; Ns.clear(); for (int x = 0; x < K; x++){ for (int y : right_diagonal[i - j - x]) Ns.push_back(y); } int ind1 = add_or(Ns), ind2 = add_xor(Ns); ind2 = add_not(ind2); int ind = add_and({ind1, ind2}); vec.push_back(ind); } } int rg = add_or(vec); return add_and({lf, rg}); } void construct_network(int H, int W, int K) { vector<int> Ns; left_diagonal.clear(); right_diagonal.clear(); for (int i = 0; i < H; i++){ for (int j = 0; j < W; j++){ left_diagonal[i + j].push_back(i * W + j); right_diagonal[i - j].push_back(i * W + j); } } Ns = {solve(H, W, K + 1), solve(H, W, K)}; add_xor(Ns); }
#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...