제출 #591031

#제출 시각아이디문제언어결과실행 시간메모리
591031Soumya1Vision Program (IOI19_vision)C++17
12 / 100
37 ms1396 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; void construct_network(int H, int W, int K) { vector<int> posleft(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (i + j == diag) { v.push_back(i * W + j); } } } posleft[diag] = add_or(v); } vector<int> posright(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v; for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (j - i + H - 1 == diag) { v.push_back(i * W + j); } } } posright[diag] = add_or(v); } vector<int> hastwoleft(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v; for (int d = diag; d <= min(H + W - 2, diag + 2 * K + 1); d++) { v.push_back(posleft[d]); } int orr = add_or(v); int xorr = add_xor(v); hastwoleft[diag] = add_and({orr, add_not(xorr)}); } vector<int> hastworight(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v; for (int d = diag; d <= min(H + W - 2, diag + 2 * K + 1); d++) { v.push_back(posright[d]); } int orr = add_or(v); int xorr = add_xor(v); hastworight[diag] = add_and({orr, add_not(xorr)}); } vector<int> twodiagleft(H + W); for (int diag = 0; diag <= H + W - 2 - K; diag++) { twodiagleft[diag] = add_and({posleft[diag], posleft[diag + K]}); } vector<int> twodiagright(H + W); for (int diag = 0; diag <= H + W - 2 - K; diag++) { twodiagright[diag] = add_and({posright[diag], posright[diag + K]}); } int first; { vector<int> v; for (int diag = 0; diag <= H + W - 2 - K; diag++) { v.push_back(twodiagleft[diag]); } int f1 = add_or(v); v.clear(); for (int diag = 0; diag <= H + W - 2; diag++) { v.push_back(hastworight[diag]); } int f2 = add_or(v); first = add_and({f1, f2}); } int second; { vector<int> v; for (int diag = 0; diag <= H + W - 2 - K; diag++) { v.push_back(twodiagright[diag]); } int f1 = add_or(v); v.clear(); for (int diag = 0; diag <= H + W - 2; diag++) { v.push_back(hastwoleft[diag]); } int f2 = add_or(v); second = add_and({f1, f2}); } add_or({first, second}); }
#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...