제출 #35689

#제출 시각아이디문제언어결과실행 시간메모리
35689funcsrJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1000 ms29008 KiB
#include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <queue> #include <set> #include <map> #include <cmath> #include <iomanip> #include <cassert> #include <bitset> using namespace std; typedef pair<int, int> P; typedef pair<int, P> P2; #define rep(i, n) for (int i=0; i<(n); i++) #define all(c) (c).begin(), (c).end() #define uniq(c) c.erase(unique(all(c)), (c).end()) #define index(xs, x) (int)(lower_bound(all(xs), x) - xs.begin()) #define _1 first #define _2 second #define pb push_back #define INF 1145141919 #define MOD 1000000007 const int B = 200; //const int B = 1; int N, M; vector<int> G[30000]; int D[30000][B+1]; signed main() { ios::sync_with_stdio(false); cin.tie(0); cin >> N >> M; rep(i, N) rep(j, B+1) D[i][j] = INF; int sx = 0, tx = 0; rep(i, M) { int b, p; cin >> b >> p; if (i == 0) sx = b; else if (i == 1) tx = b; G[b].pb(p); } rep(i, N) sort(all(G[i])), uniq(G[i]); priority_queue<P2, vector<P2>, greater<P2> > q; D[sx][0] = 0; q.push(P2(0, P(sx, 0))); while (!q.empty()) { int x = q.top()._2._1, p = q.top()._2._2, r = q.top()._1; q.pop(); if (D[x][p] < r) continue; if (p == 0) { for (int np : G[x]) { if (np <= B) { if (D[x][np] > r) { D[x][np] = r; q.push(P2(r, P(x, np))); } } else { for (int t=x%np; t<N; t+=np) { int cost = abs(x-t)/np; if (D[t][0] > r+cost) { D[t][0] = r+cost; q.push(P2(r+cost, P(t, 0))); } } } } } else { if (D[x][0] > r) { D[x][0] = r; q.push(P2(r, P(x, 0))); } if (x-p >= 0) { if (D[x-p][p] > r+1) { D[x-p][p] = r+1; q.push(P2(r+1, P(x-p, p))); } } if (x+p < N) { if (D[x+p][p] > r+1) { D[x+p][p] = r+1; q.push(P2(r+1, P(x+p, p))); } } } } int m = D[tx][0]; if (m == INF) m = -1; cout << m << "\n"; 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...