제출 #1070855

#제출 시각아이디문제언어결과실행 시간메모리
1070855ArthuroWichVision Program (IOI19_vision)C++17
100 / 100
50 ms7384 KiB
#include "vision.h" #include<bits/stdc++.h> using namespace std; int h, w, k; int calc(int i, int j) { return i*w+j; } bool isvalid(int i, int j) { if (i < 0 || j < 0 || i >= h || j >= w) { return 0; } else { return 1; } } void construct_network(int H, int W, int K) { h = H, w = W, k = K; int n = h+w-1; vector<vector<int>> diag1(n), diag2(n); for (int j = 0; j < n; j++) { int i = j-(h-1); for (int x = 0; x < h; x++) { if (isvalid(x, i+x)) { diag1[j].push_back(calc(x, i+x)); } } } for (int i = 0; i < n; i++) { for (int x = 0; x < h; x++) { if (isvalid(x, i-x)) { diag2[i].push_back(calc(x, i-x)); } } } vector<int> diag1or(n), diag1xor(n), diag1orxor(n), diag2or(n), diag2xor(n), diag2orxor(n); for (int i = 0; i < n; i++) { diag1or[i] = add_or(diag1[i]); diag1xor[i] = add_xor(diag1[i]); diag1orxor[i] = add_xor({diag1or[i], diag1xor[i]}); diag2or[i] = add_or(diag2[i]); diag2xor[i] = add_xor(diag2[i]); diag2orxor[i] = add_xor({diag2or[i], diag2xor[i]}); } vector<int> ans1k1, ans2k1, ans1k, ans2k; for (int i = 0; i < n; i++) { if (i+k >= n) { break; } vector<int> one, two; for (int j = i; j <= i+k; j++) { one.push_back(diag1orxor[j]); } for (int j = i; j <= i+k; j++) { two.push_back(diag1or[j]); } int a = add_or(two), b = add_xor(two); one.push_back(add_xor({a, b})); ans1k1.push_back(add_or(one)); } for (int i = 0; i < n; i++) { if (i+k >= n) { break; } vector<int> one, two; for (int j = i; j <= i+k; j++) { one.push_back(diag2orxor[j]); } for (int j = i; j <= i+k; j++) { two.push_back(diag2or[j]); } int a = add_or(two), b = add_xor(two); one.push_back(add_xor({a, b})); ans2k1.push_back(add_or(one)); } for (int i = 0; i < n; i++) { if (i+k-1 >= n) { break; } vector<int> one, two; for (int j = i; j <= i+k-1; j++) { one.push_back(diag1orxor[j]); } for (int j = i; j <= i+k-1; j++) { two.push_back(diag1or[j]); } int a = add_or(two), b = add_xor(two); one.push_back(add_xor({a, b})); ans1k.push_back(add_or(one)); } for (int i = 0; i < n; i++) { if (i+k-1 >= n) { break; } vector<int> one, two; for (int j = i; j <= i+k-1; j++) { one.push_back(diag2orxor[j]); } for (int j = i; j <= i+k-1; j++) { two.push_back(diag2or[j]); } int a = add_or(two), b = add_xor(two); one.push_back(add_xor({a, b})); ans2k.push_back(add_or(one)); } add_and({add_and({add_or(ans1k1), add_or(ans2k1)}), add_not({add_and({add_or(ans1k), add_or(ans2k)})})}); }
#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...