Submission #778591

#TimeUsernameProblemLanguageResultExecution timeMemory
778591jasminVision Program (IOI19_vision)C++17
44 / 100
7 ms1108 KiB
#include "vision.h" #include<bits/stdc++.h> using namespace std; int ind(int x, int y, int H, int W){ assert(0<=x && x<H && 0<=y && y<W); return x*W + y; } bool valid(int x, int y, int H, int W){ return (0<=x && x<H && 0<=y && y<W); } void construct_network_small(int H, int W, int K) { vector<int> ns_ans; int cnt=0; for(int x=0; x<H; x++){ for(int y=0; y<W; y++){ vector<int> ns; for(int i=0; i<=K; i++){ int x2=x+i; int y2=y-(K-i); if(valid(x2, y2, H, W)){ ns.push_back(ind(x2, y2, H, W)); } y2=y+(K-i); if(valid(x2, y2, H, W)){ ns.push_back(ind(x2, y2, H, W)); } } if(!ns.empty()){ add_or(ns); cnt++; add_and({ind(x, y, H, W), H*W + cnt-1}); cnt++; ns_ans.push_back(H*W + cnt-1); } } } add_or({ns_ans}); } void construct_network_zero(int H, int W, int K){ int x=0; int y=0; vector<int> ns; for(int i=0; i<=K; i++){ int x2=x+i; int y2=y-(K-i); if(valid(x2, y2, H, W)){ ns.push_back(ind(x2, y2, H, W)); } y2=y+(K-i); if(valid(x2, y2, H, W)){ ns.push_back(ind(x2, y2, H, W)); } } int i=add_or(ns); add_and({0, i}); } void construct_network1(int H, int W, int K){ //same line vector<int> ns_xor; for(int i=0; i<H; i++){ vector<int> ns; for(int j=0; j<W; j++){ ns.push_back(i*W + j); } int x = add_or(ns); ns_xor.push_back(x); } int sameline = add_xor(ns_xor); //neighbours vector<int> ind(W); for(int i=0; i<W; i++){ vector<int> ns; for(int j=0; j<H; j++){ ns.push_back(j*W + i); } ind[i] = add_or(ns); } vector<int> ns_or; for(int i=0; i+1<W; i++){ ns_or.push_back(add_and({ind[i], ind[i+1]})); } int neighbours=add_or(ns_or); //answer add_and({sameline, neighbours}); } void construct_network(int H, int W, int K){ if(H*W<=1000){ construct_network_small(H, W, K); return; } if(K==1){ construct_network1(H, W, K); return; } construct_network_zero(H, W, K); }
#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...