답안 #549053

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
549053 2022-04-15T03:42:59 Z czhang2718 Jakarta Skyscrapers (APIO15_skyscraper) C++17
100 / 100
434 ms 168044 KB
#include "bits/stdc++.h"
using namespace std;

typedef pair<int,int> pii;
#define f first
#define s second
#define nl '\n'
#define pb push_back
#define sz(x) (int) x.size()

const int N=30001;
const int B=175;
const int MX=5000000;
short n,m;
vector<short> v[N];
short P[N], x[N];
int dist[N][B];
bool done[N][B];
vector<pair<short, short>> todo[MX+5];

int main(){
  cin.tie(0)->sync_with_stdio(0);

  cin >> n >> m;
  for(int i=0; i<m; i++){
    cin >> x[i] >> P[i];
    v[x[i]].push_back(i);
  }
  for(int i=0; i<n; i++){
    for(int j=0; j<B; j++) dist[i][j]=1e9;
  }
  dist[x[0]][0]=0;

  set<pair<int, pii>> s;

  auto go=[&](int i, int d, int b){
    for(int c:{i+b, i-b}){
      if(c<0 || c>=n) continue;
      if(d+1<dist[c][b]){
        dist[c][b]=d+1;
        todo[d+1].pb({c, b});
      }
      if(d+1<dist[c][0]){
        dist[c][0]=d+1;
        todo[d+1].pb({c, 0});
      }
    }
  };

  todo[0].pb({x[0], 0});
  int d=0;
  while(true){
    pii p;
    while(true){
      while(d<MX && !sz(todo[d])) d++;
      if(d==MX) break;
      p=todo[d].back();
      todo[d].pop_back();
      if(!done[p.f][p.s]) break;
    }
    if(d==MX) break;
    int a=p.f, b=p.s;
    done[a][b]=1;
    // cout << a << " " << b << nl;
    if(a==x[1]){
      cout << d; return 0;
    }
    if(!b){
      for(int i:v[a]){
        if(P[i]>=B){
          for(int j=a%P[i]; j<n; j+=P[i]){
            if(d+abs(j-a)/P[i]<dist[j][0]){
              dist[j][0]=d+abs(j-a)/P[i];
              todo[dist[j][0]].pb({j, 0});
            }
          }
        }
        else{
          go(a, d, P[i]);
        }
      }
    }
    else{
      go(a, d, b);
    }
  }
  cout << -1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 54 ms 118348 KB Output is correct
2 Correct 54 ms 118400 KB Output is correct
3 Correct 57 ms 118348 KB Output is correct
4 Correct 67 ms 118448 KB Output is correct
5 Correct 56 ms 118340 KB Output is correct
6 Correct 60 ms 118560 KB Output is correct
7 Correct 56 ms 118400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 69 ms 118444 KB Output is correct
2 Correct 68 ms 118436 KB Output is correct
3 Correct 69 ms 118456 KB Output is correct
4 Correct 63 ms 118348 KB Output is correct
5 Correct 60 ms 118388 KB Output is correct
6 Correct 57 ms 118452 KB Output is correct
7 Correct 59 ms 118396 KB Output is correct
8 Correct 56 ms 118472 KB Output is correct
9 Correct 55 ms 118488 KB Output is correct
10 Correct 56 ms 118420 KB Output is correct
11 Correct 58 ms 118464 KB Output is correct
12 Correct 60 ms 118496 KB Output is correct
13 Correct 62 ms 118452 KB Output is correct
14 Correct 57 ms 118540 KB Output is correct
15 Correct 59 ms 118568 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 118428 KB Output is correct
2 Correct 60 ms 118440 KB Output is correct
3 Correct 59 ms 118364 KB Output is correct
4 Correct 68 ms 118396 KB Output is correct
5 Correct 56 ms 118456 KB Output is correct
6 Correct 56 ms 118448 KB Output is correct
7 Correct 58 ms 118380 KB Output is correct
8 Correct 56 ms 118476 KB Output is correct
9 Correct 61 ms 118476 KB Output is correct
10 Correct 62 ms 118452 KB Output is correct
11 Correct 59 ms 118556 KB Output is correct
12 Correct 54 ms 118532 KB Output is correct
13 Correct 66 ms 118500 KB Output is correct
14 Correct 59 ms 118484 KB Output is correct
15 Correct 58 ms 118548 KB Output is correct
16 Correct 62 ms 118488 KB Output is correct
17 Correct 57 ms 119124 KB Output is correct
18 Correct 66 ms 119624 KB Output is correct
19 Correct 67 ms 119796 KB Output is correct
20 Correct 58 ms 120252 KB Output is correct
21 Correct 63 ms 118696 KB Output is correct
22 Correct 65 ms 119704 KB Output is correct
23 Correct 60 ms 119756 KB Output is correct
24 Correct 59 ms 120152 KB Output is correct
25 Correct 64 ms 120096 KB Output is correct
26 Correct 57 ms 120248 KB Output is correct
27 Correct 57 ms 120272 KB Output is correct
28 Correct 63 ms 120652 KB Output is correct
29 Correct 59 ms 120552 KB Output is correct
30 Correct 65 ms 120220 KB Output is correct
31 Correct 59 ms 120328 KB Output is correct
32 Correct 58 ms 120284 KB Output is correct
33 Correct 59 ms 120780 KB Output is correct
34 Correct 57 ms 120468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 59 ms 118448 KB Output is correct
2 Correct 70 ms 118400 KB Output is correct
3 Correct 58 ms 118356 KB Output is correct
4 Correct 65 ms 118440 KB Output is correct
5 Correct 57 ms 118340 KB Output is correct
6 Correct 65 ms 118460 KB Output is correct
7 Correct 68 ms 118464 KB Output is correct
8 Correct 58 ms 118476 KB Output is correct
9 Correct 55 ms 118412 KB Output is correct
10 Correct 55 ms 118544 KB Output is correct
11 Correct 58 ms 118552 KB Output is correct
12 Correct 58 ms 118548 KB Output is correct
13 Correct 70 ms 118476 KB Output is correct
14 Correct 57 ms 118484 KB Output is correct
15 Correct 58 ms 118444 KB Output is correct
16 Correct 64 ms 118552 KB Output is correct
17 Correct 57 ms 119120 KB Output is correct
18 Correct 76 ms 119564 KB Output is correct
19 Correct 73 ms 119788 KB Output is correct
20 Correct 70 ms 120268 KB Output is correct
21 Correct 65 ms 118656 KB Output is correct
22 Correct 66 ms 119676 KB Output is correct
23 Correct 57 ms 119752 KB Output is correct
24 Correct 57 ms 120080 KB Output is correct
25 Correct 59 ms 120200 KB Output is correct
26 Correct 58 ms 120336 KB Output is correct
27 Correct 66 ms 120204 KB Output is correct
28 Correct 59 ms 120652 KB Output is correct
29 Correct 69 ms 120488 KB Output is correct
30 Correct 62 ms 120228 KB Output is correct
31 Correct 59 ms 120404 KB Output is correct
32 Correct 59 ms 120300 KB Output is correct
33 Correct 67 ms 120956 KB Output is correct
34 Correct 60 ms 120548 KB Output is correct
35 Correct 63 ms 119884 KB Output is correct
36 Correct 59 ms 119372 KB Output is correct
37 Correct 61 ms 120256 KB Output is correct
38 Correct 61 ms 120452 KB Output is correct
39 Correct 62 ms 120148 KB Output is correct
40 Correct 64 ms 120252 KB Output is correct
41 Correct 66 ms 120420 KB Output is correct
42 Correct 63 ms 120416 KB Output is correct
43 Correct 62 ms 120324 KB Output is correct
44 Correct 65 ms 120512 KB Output is correct
45 Correct 75 ms 121932 KB Output is correct
46 Correct 67 ms 121064 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 118324 KB Output is correct
2 Correct 62 ms 118384 KB Output is correct
3 Correct 56 ms 118456 KB Output is correct
4 Correct 69 ms 118580 KB Output is correct
5 Correct 58 ms 118424 KB Output is correct
6 Correct 55 ms 118352 KB Output is correct
7 Correct 60 ms 118452 KB Output is correct
8 Correct 59 ms 118476 KB Output is correct
9 Correct 60 ms 118580 KB Output is correct
10 Correct 58 ms 118476 KB Output is correct
11 Correct 56 ms 118536 KB Output is correct
12 Correct 56 ms 118552 KB Output is correct
13 Correct 57 ms 118532 KB Output is correct
14 Correct 59 ms 118544 KB Output is correct
15 Correct 63 ms 118568 KB Output is correct
16 Correct 69 ms 118512 KB Output is correct
17 Correct 57 ms 119064 KB Output is correct
18 Correct 67 ms 119640 KB Output is correct
19 Correct 73 ms 119892 KB Output is correct
20 Correct 66 ms 120212 KB Output is correct
21 Correct 67 ms 118732 KB Output is correct
22 Correct 66 ms 119700 KB Output is correct
23 Correct 57 ms 119840 KB Output is correct
24 Correct 67 ms 120024 KB Output is correct
25 Correct 60 ms 120088 KB Output is correct
26 Correct 59 ms 120240 KB Output is correct
27 Correct 62 ms 120280 KB Output is correct
28 Correct 60 ms 120620 KB Output is correct
29 Correct 60 ms 120548 KB Output is correct
30 Correct 60 ms 120236 KB Output is correct
31 Correct 73 ms 120340 KB Output is correct
32 Correct 62 ms 120344 KB Output is correct
33 Correct 72 ms 120892 KB Output is correct
34 Correct 63 ms 120476 KB Output is correct
35 Correct 66 ms 119936 KB Output is correct
36 Correct 61 ms 119372 KB Output is correct
37 Correct 64 ms 120336 KB Output is correct
38 Correct 65 ms 120420 KB Output is correct
39 Correct 65 ms 120084 KB Output is correct
40 Correct 65 ms 120240 KB Output is correct
41 Correct 65 ms 120500 KB Output is correct
42 Correct 62 ms 120420 KB Output is correct
43 Correct 69 ms 120436 KB Output is correct
44 Correct 69 ms 120448 KB Output is correct
45 Correct 86 ms 121872 KB Output is correct
46 Correct 69 ms 121068 KB Output is correct
47 Correct 71 ms 129560 KB Output is correct
48 Correct 79 ms 134784 KB Output is correct
49 Correct 81 ms 136272 KB Output is correct
50 Correct 78 ms 137968 KB Output is correct
51 Correct 80 ms 145024 KB Output is correct
52 Correct 79 ms 145048 KB Output is correct
53 Correct 74 ms 141260 KB Output is correct
54 Correct 98 ms 144588 KB Output is correct
55 Correct 95 ms 144904 KB Output is correct
56 Correct 87 ms 146024 KB Output is correct
57 Correct 73 ms 139248 KB Output is correct
58 Correct 88 ms 146004 KB Output is correct
59 Correct 89 ms 145968 KB Output is correct
60 Correct 87 ms 145996 KB Output is correct
61 Correct 82 ms 145744 KB Output is correct
62 Correct 130 ms 153152 KB Output is correct
63 Correct 108 ms 145704 KB Output is correct
64 Correct 111 ms 145420 KB Output is correct
65 Correct 166 ms 150984 KB Output is correct
66 Correct 434 ms 168044 KB Output is correct
67 Correct 177 ms 153024 KB Output is correct