제출 #425174

#제출 시각아이디문제언어결과실행 시간메모리
425174AugustinasJucasVision Program (IOI19_vision)C++14
52 / 100
37 ms1864 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(n > 30 && m > 30){ int viso = 0; int prm = 0; for(int i = 0; i < 1; i++){ for(int j = 0; j < 1; 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 < 1; i++){ for(int j = 0; j < 1; 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); 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...