제출 #972101

#제출 시각아이디문제언어결과실행 시간메모리
972101batsukh2006Jakarta Skyscrapers (APIO15_skyscraper)C++17
10 / 100
36 ms600 KiB
#include<iostream> #include<stdio.h> #include<math.h> #include<map> #include<string> #include<algorithm> #include<vector> #include<string.h> #include<utility> #include<set> #include<cmath> #include<queue> #include<deque> #include<functional> #include<stack> #include<limits.h> #include<iomanip> #include<unordered_map> #include<numeric> #include<tuple> #include<bitset> using namespace std; #define MOD 1000000007 //#define int long long #define ss second #define ff first #define endl '\n' signed main(){ // freopen("file.in", "r", stdin); // freopen("file.out", "w", stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; vector<int> b(m+1),p(m+1); for(int i=1; i<=m; i++) cin>>b[i]>>p[i]; int cnt=n-1; queue<int> q; q.push(2); vector<bool> vis(m+1); vector<int> dp(m+1,1e9); dp[2]=0; vis[2]=1; while(cnt>0&&!q.empty()){ int need=q.size(); queue<int> s; while(need--){ int c=q.front(); q.pop(); s.push(c); q.push(c); } need=q.size(); while(need--){ int c=q.front(); q.pop(); int tmp=s.size(); while(tmp--){ int v=s.front(); s.pop(); if(abs(b[v]-b[c])%p[v]==0){ dp[v]=min(dp[v],abs(b[v]-b[c])/p[v]+dp[c]); } s.push(v); } q.push(c); } need=q.size(); while(need--){ int c=q.front(); q.pop(); cnt--; for(int i=1; i<=m; i++){ if(abs(b[i]-b[c])%p[i]==0){ dp[i]=min(dp[i],abs(b[i]-b[c])/p[i]+dp[c]); } } } for(int i=1; i<=m; i++){ if(!vis[i]&&dp[i]!=1e9){ vis[i]=1; q.push(i); } } } int ans=1e9; for(int i=2; i<=m; i++){ if(abs(b[1]-b[i])%p[1]==0){ ans=min(ans,abs(b[1]-b[i])/p[1]+dp[i]); } } if(ans==1e9) cout<<-1; else cout<<ans; return 0; }
#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...