Submission #994013

#TimeUsernameProblemLanguageResultExecution timeMemory
994013mariaclaraVision Program (IOI19_vision)C++17
0 / 100
6 ms1372 KiB
#include "vision.h" #include<bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() #define pb push_back #define mk make_pair #define fr first #define sc second int n, m; void construct_network(int H, int W, int K) { n = H; m = W; int used_space = n*m-1; // PARTE 1 vector<int> l_sum; for(int sum = 0; sum <= n + m - 2; sum++) { // x + y vector<int> q; for(int x = 0; x < n; x++) { int y = sum - x; if(0 <= y and y < m) q.pb(x*m + y); } add_or(q); // adicionamos as somas l_sum.pb(used_space + 1 + sum); } // n + m - 1 queries add_or({used_space+1, used_space+2}); vector<int> pref_sum = {used_space + 1, used_space + n + m}; used_space += n + m; for(int i = 2; i <= n + m - 2; i++) { add_or({used_space, pref_sum[0] + i}); used_space++; pref_sum.pb(used_space); } // PARTE 2 vector<int> l_dif; for(int dif = 1 - m; dif <= n - 1; dif++) { // x - y vector<int> q; for(int x = 0; x < n; x++) { int y = x - dif; if(0 <= y and y < m) q.pb(x*m + y); } add_or(q); // adicionamos as diferencas l_dif.pb(used_space + dif + m); } // n + m - 1 queries add_or({used_space+1, used_space+2}); vector<int> pref_dif = {used_space+1, used_space+n+m}; used_space += n + m; for(int i = 2; i <= n + m - 2; i++) { add_or({used_space, pref_dif[0] + i}); used_space++; pref_dif.pb(used_space); } // PARTE 3 - checar se há caras com distancia exatamente k vector<int> q; for(int i = K; i < n + m - 1; i++) { add_and({l_sum[i], l_sum[i-K]}); used_space++; q.pb(used_space); } for(int i = K; i < n + m - 1; i++) { add_and({l_dif[i], l_dif[i-K]}); used_space++; q.pb(used_space); } add_or(q); used_space++; int distK = used_space; q.clear(); // PARTE 4 - checar se há caras com distância maior que K for(int i = K+1; i < n + m - 1; i++) { add_and({l_sum[i], pref_sum[i-K-1]}); used_space++; q.pb(used_space); } for(int i = K+1; i < n + m - 1; i++) { add_and({l_dif[i], pref_dif[i-K-1]}); used_space++; q.pb(used_space); } add_or(q); used_space++; add_not(used_space); used_space++; int dist_max = used_space; q.clear(); add_and({distK, dist_max}); }
#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...