Submission #838442

#TimeUsernameProblemLanguageResultExecution timeMemory
838442PenguinsAreCuteJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
223 ms262144 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define mp make_pair #define pb push_back #define LL_MAX LONG_LONG_MAX #define LL_MIN LONG_LONG_MIN #define speed ios_base::sync_with_stdio(false); cin.tie(0) #define stMx(a,b) a = max(a,b) #define stMn(a,b) a = min(a,b) typedef pair<int,int> ii; typedef vector<int> vi; typedef set<int> si; typedef vector<ii> vii; typedef set<ii> sii; typedef pair<int,ii> iii; #define REP(i, a, b) for(int i = a; i < b; i++) #define HASTC 0 #define BSIZE 200 vector<pair<ii,int>> adj[30069][BSIZE+5]; int dist[30069][BSIZE+5]; void dijkstra(ii s) { priority_queue<iii,vector<iii>,greater<iii>> pq; REP(i,0,30069) REP(j,0,BSIZE+5) dist[i][j]=1210201042069; dist[s.fi][s.se]=0; pq.push(iii(0,s)); while(!pq.empty()) { iii c=pq.top(); pq.pop(); if(c.fi!=dist[c.se.fi][c.se.se]) continue; for(auto i: adj[c.se.fi][c.se.se]) { if(dist[i.fi.fi][i.fi.se]>c.fi+i.se) { dist[i.fi.fi][i.fi.se]=c.fi+i.se; pq.push(iii(dist[i.fi.fi][i.fi.se], i.fi)); } } } } void solvetc(int idx) { int N, M, B, P; cin >> N >> M; ii s, d; REP(i,0,N) REP(j,1,BSIZE+1) { // connect pos pow to (pos+pow,pow),(pos-pow,pow),(pos+pow),(pos-pow) if(i-j>=0) { adj[i][j].pb(mp(mp(i-j,j),1)); adj[i][j].pb(mp(mp(i-j,0),1)); } if(i+j<N) { adj[i][j].pb(mp(mp(i+j,j),1)); adj[i][j].pb(mp(mp(i+j,0),1)); } } REP(i,0,M) { cin>>B>>P; if(i==0) s=mp(B,0); else if(i==1) d=mp(B,0); if(P<=BSIZE) { adj[B][0].pb(mp(mp(B,P),0)); adj[B][P].pb(mp(mp(B,0),0)); } else REP(i,-(B/P),(N-B-1)/P+1) adj[B][0].pb(mp(mp(P*i+B,0),abs(i))); } dijkstra(s); cout<<(dist[d.fi][d.se]!=1210201042069?dist[d.fi][d.se]:-1); } int32_t main() { int tc; if(HASTC) cin>>tc; else tc=1; for(int i=0;i<tc;i++) solvetc(i); }
#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...