제출 #424829

#제출 시각아이디문제언어결과실행 시간메모리
424829AugustinasJucasVision Program (IOI19_vision)C++14
0 / 100
19 ms1884 KiB
#include <bits/stdc++.h> #include "vision.h" using namespace std; vector<pair<int, int> > pss = {{-1, 1}, {-1, -1}, {1, 1}, {1, -1}}; vector<pair<int, int> > dists(int e, int s, int k, int n, int m){ int pe = 0, ps = 0; vector<pair<int, int> > ret; vector<pair<int, int> > ans; for(auto x : pss){ for(int i = 0; i <= k; i++){ pe = e + x.first * i; ps = s + x.second * (k-i); if(pe < 0 || pe >= n || ps < 0 || ps >= m) continue; ret.push_back({pe, ps}); } } if(ret.size() == 0) return {}; sort(ret.begin(), ret.end()); ans.push_back(ret[0]); for(int i = 1; i < (int) ret.size(); i++) if(ret[i] != ret[i-1]) ans.push_back(ret[i]); return ans; } void construct_network(int n, int m, int k) { if(k == 1){ int viso = 0; for(int i = 0; i < n; i++){ vector<int> hsh; for(int j = 0; j < m; j++){ hsh.push_back(i * m + j); } add_xor(hsh); add_or(hsh); viso += 2; } for(int i = 0; i < m; i++){ vector<int> hsh; for(int j = 0; j < n; j++){ hsh.push_back(j * m + i); } add_xor(hsh); add_or(hsh); viso += 2; } int bv = viso; int L = viso; int R = viso-1; for(int i = 0; i < n + m; i++){ add_xor({bv + 2 * i, bv + 2 * i + 1}); R++; } vector<int> last; for(int i = L; i <= R; i++) last.push_back(i); add_or(last); return ; } int viso = 0; int prm = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ //cout << i << ", " << j << endl; auto ms = dists(i, j, k, n, m); if(ms.size() == 0) continue; vector<int> hsh; for(auto x : ms) hsh.push_back(x.first * m + x.second); add_or(hsh); //cout << "nuo [" << i << "; " << j << "] nutole per " << k << ": "; for(auto x : ms) cout << "{" << x.first << ", " << x.second << "}, "; //cout << endl; viso++; prm++; } } if(prm == 0){ vector<int> ret; for(int i = 0; i < n*m; i++) ret.push_back(i); add_and(ret); return; } int curInd = n * m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ auto ms = dists(i, j, k, n, m); if(ms.size() == 0) continue; vector<int> hsh = {curInd, i * m + j}; add_and(hsh); curInd++; viso++; } } int endd = viso; vector<int> hsh; for(int i = n * m + prm; i < n*m+endd; i++){ hsh.push_back(i); } add_or(hsh); }
#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...