제출 #870058

#제출 시각아이디문제언어결과실행 시간메모리
870058amirhoseinfar1385Jakarta Skyscrapers (APIO15_skyscraper)C++17
22 / 100
5 ms4124 KiB
#include<bits/stdc++.h> using namespace std; const short maxn=30000+10; short n,m,av,akh[maxn]; set<short>fst[maxn]; vector<short>st[maxn]; short s=0; void upd(short ind,short p){ st[ind].push_back(p); if(fst[ind].count(p)!=0){ return ; } fst[ind].insert(p); for(short i=ind-p;i>=0;i-=p){ fst[i].insert(p); } for(short i=ind+p;i<n;i+=p){ fst[i].insert(p); } } short solve(){ vector<pair<short,pair<short,short>>>di; for(auto x:st[av]){ di.push_back(make_pair(0,make_pair(av,x))); } for(short i=0;i<(short)di.size();i++){ pair<short,pair<short,short>> x=di[i]; if(x.second.first<0||x.second.first>=n){ continue; } if((short)fst[x.second.first].size()==0||fst[x.second.first].count(x.second.second)==0){ continue; } if(x.second.first==s){ return x.first; } di.push_back(make_pair(x.first+1,make_pair(x.second.first-x.second.second,x.second.second))); di.push_back(make_pair(x.first+1,make_pair(x.second.first+x.second.second,x.second.second))); fst[x.second.first].erase(x.second.second); for(auto y:st[x.second.first]){ di.push_back(make_pair(x.first+1,make_pair(x.second.first-y,y))); di.push_back(make_pair(x.first+1,make_pair(x.second.first+y,y))); fst[x.second.first].erase(y); } st[x.second.first].clear(); } return -1; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(short i=0;i<m;i++){ short u,v; cin>>u>>v; upd(u,v); if(i==1){ s=u; } if(i==0){ av=u; } // if(te>1000000){ // assert(0); // } } // if(te>1000000){ // assert(0); // } cout<<solve()<<"\n"; }
#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...