제출 #591044

#제출 시각아이디문제언어결과실행 시간메모리
591044Soumya1Vision Program (IOI19_vision)C++17
20 / 100
62 ms5384 KiB
#include "vision.h" #include <bits/stdc++.h> #ifdef __LOCAL__ #include <debug_local.h> #endif using namespace std; void construct_network(int H, int W, int K) { vector<int> posleft(H + W), posxorleft(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); posxorleft[diag] = add_xor(v); } vector<int> posright(H + W), posxorright(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); posxorright[diag] = add_xor(v); } vector<int> hastwoleft(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v1, v2; for (int d = diag; d <= min(H + W - 2, diag + 2 * K + 1); d++) { v1.push_back(posleft[d]); v2.push_back(posxorleft[d]); } int orr = add_or(v1); int xorr = add_xor(v2); hastwoleft[diag] = add_and({orr, add_not(xorr)}); } vector<int> hastworight(H + W); for (int diag = 0; diag <= H + W - 2; diag++) { vector<int> v1, v2; for (int d = diag; d <= min(H + W - 2, diag + 2 * K + 1); d++) { v1.push_back(posright[d]); v2.push_back(posxorright[d]); } int orr = add_or(v1); int xorr = add_xor(v2); 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...