제출 #834643

#제출 시각아이디문제언어결과실행 시간메모리
834643tranxuanbachVision Program (IOI19_vision)C++17
12 / 100
10 ms1388 KiB
#include "vision.h" #include <bits/stdc++.h> using namespace std; const int N = 2e2 + 5, M = 1e4 + 5; int n, m, k; int cnt_dia; vector <int> query; int offset_tmp; int offset_original; int zero, one; int offset_maindia; // y - x int offset_antidia; // y + x int offset_k_maindia; int offset_k_antidia; int offset_kn1_maindia; int offset_kn1_antidia; int same_maindia, same_antidia; int offset_within_k; int within_k; int offset_within_kn1; int within_kn1; void construct_network(int _n, int _m, int _k){ n = _n; m = _m; k = _k; cnt_dia = n + m - 1; offset_original = 0; query = {offset_original + (0 * m + 0), add_not(offset_original + (0 * m + 0))}; zero = add_and(query); one = add_or(query); offset_maindia = one + 1 - (0 - (n - 1)); for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.clear(); for (int y = 0; y < m; y++){ int x = y - dia; if (not (0 <= x and x < n)){ continue; } query.emplace_back(offset_original + (x * m + y)); } add_xor(query); } offset_antidia = offset_maindia + ((m - 1) - 0) + 1 - (0 + 0); for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){ query.clear(); for (int y = 0; y < m; y++){ int x = dia - y; if (not (0 <= x and x < n)){ continue; } query.emplace_back(offset_original + (x * m + y)); } add_xor(query); } offset_tmp = offset_antidia + ((n - 1) + (m - 1)) + 1 - (0 - (n - 1)); for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query = {zero}; for (int dia2 = dia + 1; dia2 <= min(dia + k, (m - 1) - 0); dia2++){ query.emplace_back(offset_maindia + dia2); } add_or(query); } offset_k_maindia = offset_tmp + ((m - 1) - 0) + 1 - (0 - (n - 1)); for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query = {offset_maindia + dia, offset_tmp + dia}; add_and(query); } offset_tmp = offset_k_maindia + ((m - 1) - 0) + 1 - (0 + 0); for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){ query = {zero}; for (int dia2 = dia + 1; dia2 <= min(dia + k, (n - 1) + (m - 1)); dia2++){ query.emplace_back(offset_antidia + dia2); } add_or(query); } offset_k_antidia = offset_tmp + ((n - 1) + (m - 1)) + 1 - (0 + 0); for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){ query = {offset_antidia + dia, offset_tmp + dia}; add_and(query); } offset_tmp = offset_k_antidia + ((n - 1) + (m - 1)) + 1 - (0 - (n - 1)); for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query = {zero}; for (int dia2 = dia + 1; dia2 <= min(dia + (k - 1), (m - 1) - 0); dia2++){ query.emplace_back(offset_maindia + dia2); } add_or(query); } offset_kn1_maindia = offset_tmp + ((m - 1) - 0) + 1 - (0 - (n - 1)); for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query = {offset_maindia + dia, offset_tmp + dia}; add_and(query); } offset_tmp = offset_kn1_maindia + ((m - 1) - 0) + 1 - (0 + 0); for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){ query = {zero}; for (int dia2 = dia + 1; dia2 <= min(dia + (k - 1), (n - 1) + (m - 1)); dia2++){ query.emplace_back(offset_antidia + dia2); } add_or(query); } offset_kn1_antidia = offset_tmp + ((n - 1) + (m - 1)) + 1 - (0 + 0); for (int dia = 0 + 0; dia <= (n - 1) + (m - 1); dia++){ query = {offset_antidia + dia, offset_tmp + dia}; add_and(query); } query = {}; for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.emplace_back(offset_maindia + dia); } same_maindia = add_not(add_or(query)); query = {}; for (int dia = 0; dia <= (n - 1) + (m - 1); dia++){ query.emplace_back(offset_antidia + dia); } same_antidia = add_not(add_or(query)); offset_within_k = same_antidia + 1 - (0); query = {same_maindia}; for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.emplace_back(offset_k_maindia + dia); } add_or(query); query = {same_antidia}; for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.emplace_back(offset_k_antidia + dia); } add_or(query); query = {offset_within_k + 0, offset_within_k + 1}; within_k = add_and(query); offset_within_kn1 = within_k + 1 - (0); query = {same_maindia}; for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.emplace_back(offset_kn1_maindia + dia); } add_or(query); query = {same_antidia}; for (int dia = 0 - (n - 1); dia <= (m - 1) - 0; dia++){ query.emplace_back(offset_kn1_antidia + dia); } add_or(query); query = {offset_within_kn1 + 0, offset_within_kn1 + 1}; within_kn1 = add_and(query); query = {within_k, add_not(within_kn1)}; add_and(query); }
#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...