제출 #879956

#제출 시각아이디문제언어결과실행 시간메모리
879956JakobZorzJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1052 ms2784 KiB
#include<iostream> #include<vector> #include<queue> #include<stack> #include<algorithm> #include<limits.h> #include<math.h> #include<map> #include<set> #include<unordered_map> #include<unordered_set> #include<iomanip> #include<cstring> typedef long long ll; typedef unsigned long long ull; typedef long double ld; using namespace std; //const int MOD=1e9+7; //typedef pair<ll,ll>Point; //typedef pair<ll,ll>Line; //#define x first //#define y second int n,m; int pos[30000]; int gap[30000]; vector<int>gaps[30000]; int dist[30000]; void solve(){ for(int i=0;i<30000;i++) dist[i]=1000000; cin>>n>>m; for(int i=0;i<m;i++){ cin>>pos[i]>>gap[i]; gaps[pos[i]].push_back(gap[i]); } dist[pos[0]]=0; queue<int>q; q.push(pos[0]); while(!q.empty()){ int pos=q.front(); q.pop(); for(int g:gaps[pos]){ for(int i=1;pos+g*i<n;i++){ if(dist[pos+g*i]>dist[pos]+i){ dist[pos+g*i]=dist[pos]+i; q.push(pos+g*i); } } for(int i=1;pos-g*i>=0;i++){ if(dist[pos-g*i]>dist[pos]+i){ dist[pos-g*i]=dist[pos]+i; q.push(pos-g*i); } } } } int res=dist[pos[1]]; if(res==1000000) res=-1; cout<<res<<"\n"; } int main(){ ios::sync_with_stdio(false);cout.tie(NULL);cin.tie(NULL); //freopen("bank.in","r",stdin);freopen("bank.out","w",stdout); int t=1;//cin>>t; while(t--)solve(); return 0; } /* 5 3 0 2 1 1 4 1 */
#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...