Submission #161630

#TimeUsernameProblemLanguageResultExecution timeMemory
161630georgerapeanuVision Program (IOI19_vision)C++14
100 / 100
94 ms9236 KiB
#include "vision.h" #pragma once using namespace std; const int NMAX = 200; int sum_diag_pos[2 * NMAX + 5]; int sum2_diag_pos[2 * NMAX + 5]; int diff_diag_pos[2 * NMAX + 5]; int diff2_diag_pos[2 * NMAX + 5]; vector<int> sum_cells[2 * NMAX + 5]; vector<int> diff_cells[2 * NMAX + 5]; int last_ind; int at_most_k(int n,int m,int k){ vector<int> ok_sum_k_pos; for(int i = 0;i + k < n + m - 1;i++){ vector<int> tmp; for(int j = i;j <= i + k;j++){ tmp.push_back(sum_diag_pos[j]); tmp.push_back(sum2_diag_pos[j]); } last_ind++; add_or(tmp); last_ind++; add_xor(tmp); last_ind++; add_not(last_ind - 2); ok_sum_k_pos.push_back(last_ind++); add_and({last_ind - 2,last_ind - 4}); } int ok_sum_k = last_ind++; add_or(ok_sum_k_pos); vector<int> ok_diff_k_pos; for(int i = 0;i + k < n + m - 1;i++){ vector<int> tmp; for(int j = i;j <= i + k;j++){ tmp.push_back(diff_diag_pos[j]); tmp.push_back(diff2_diag_pos[j]); } last_ind++; add_or(tmp); last_ind++; add_xor(tmp); last_ind++; add_not(last_ind - 2); ok_diff_k_pos.push_back(last_ind++); add_and({last_ind - 2,last_ind - 4}); } int ok_diff_k = last_ind++; add_or(ok_diff_k_pos); last_ind++; add_and({ok_diff_k,ok_sum_k}); return last_ind - 1; } void construct_network(int n, int m, int k) { last_ind = n * m; for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ sum_cells[i + j].push_back(i * m + j); diff_cells[i - j + m - 1].push_back(i * m + j); } } for(int sum = 0;sum < n + m - 1;sum++){ sum_diag_pos[sum] = last_ind++; add_or(sum_cells[sum]); last_ind++; add_xor(sum_cells[sum]); last_ind++; add_not(last_ind - 2); sum2_diag_pos[sum] = last_ind++; add_and({last_ind - 2,sum_diag_pos[sum]}); } for(int diff = 0;diff < n + m - 1;diff++){ diff_diag_pos[diff] = last_ind++; add_or(diff_cells[diff]); last_ind++; add_xor(diff_cells[diff]); last_ind++; add_not(last_ind - 2); diff2_diag_pos[diff] = last_ind++; add_and({last_ind - 2,diff_diag_pos[diff]}); } int ok1 = at_most_k(n,m,k); int ok2 = at_most_k(n,m,k - 1); add_not(ok2); ok2 = last_ind++; add_and({ok1,ok2}); }

Compilation message (stderr)

vision.cpp:2:9: warning: #pragma once in main file
 #pragma once
         ^~~~
#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...