답안 #1028994

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1028994 2024-07-20T11:03:13 Z AdamGS Escape Route (JOI21_escape_route) C++17
70 / 100
9000 ms 287696 KB
#include "escape_route.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(a, b) for(int a = 0; a < (b); ++a)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(), a.end()
const ll INF=1e18+7;
const int LIM=107;
pair<ll,ll>T[LIM][LIM];
vector<vector<ll>>X[LIM];
vector<ll>P[LIM], K[LIM];
ll li[LIM], n, S, q;
void calc1() {
  rep(i, n) {
    rep(j, n) P[i].pb(INF);
    vector<ll>odw(n);
    P[i][i]=0;
    while(true) {
      pair<ll,ll>mi={INF, INF};
      rep(j, n) if(!odw[j]) mi=min(mi, {P[i][j], j});
      if(mi.st==INF) break;
      ll p=mi.nd;
      odw[p]=1;
      rep(j, n) if(!odw[j] && T[p][j].nd!=-1) {
        ll a=mi.st/S, b=mi.st%S;
        if(b<=T[p][j].nd-T[p][j].st) P[i][j]=min(P[i][j], mi.st+T[p][j].st);
        else P[i][j]=min(P[i][j], (a+1)*S+T[p][j].st);
      }
    } 
  }
}
vector<ll>calc2(ll a, ll b) {
  vector<ll>odl(n, INF), odw(n);
  odl[a]=0;
  while(true) {
    pair<ll,ll>mi={INF, INF};
    rep(i, n) if(!odw[i]) mi=min(mi, {odl[i], i});
    if(mi.st==INF) break;
    ll p=mi.nd;
    odw[p]=1;
    rep(i, n) if(!odw[i] && T[p][i].nd!=-1) {
      if(mi.st+b<=T[p][i].nd-T[p][i].st) odl[i]=min(odl[i], mi.st+T[p][i].st);
    }
  }
  return odl;
}
vector<ll>calculate_necessary_time(int _n, int _m, ll _S, int _q, vector<int>_A, vector<int>_B, 
    vector<ll>_L, vector<ll>_C, vector<int>_U, vector<int>_V, vector<ll>_T) {
  n=_n; S=_S; q=_q;
  rep(i, n) rep(j, n) T[i][j]={0, -1};
  rep(i, _m) T[_A[i]][_B[i]]=T[_B[i]][_A[i]]={_L[i], _C[i]};
  calc1();
  rep(i, n) {
    X[i].pb(calc2(i, 0));
    K[i].pb(0);
    while(true) {
      ll s=K[i].size()-1, nxt=INF;
      rep(a, n) rep(b, n) if(X[i][s][a]+K[i][s]<=T[a][b].nd-T[a][b].st) {
        nxt=min(nxt, T[a][b].nd-T[a][b].st-X[i][s][a]-K[i][s]);
      }
      nxt+=K[i][s]+1;
      if(nxt>=INF) break;
      X[i].pb(calc2(i, nxt));
      K[i].pb(nxt);
    }
    rep(j, X[i].size()) {
      rep(l, n) if(X[i][j][l]==INF) X[i][j][l]=2*INF;
      rep(l, n) if(X[i][j][l]<INF) {
        rep(d, n) X[i][j][d]=min(X[i][j][d], INF+S+P[l][d]);
      }
    }
  }
  vector<ll>ans(q, INF);
  vector<pair<ll,ll>>pyt(q);
  rep(i, q) pyt[i]={_T[i], i};
  sort(all(pyt));
  for(auto xd : pyt) {
    int i=xd.nd;
    ll a=_U[i], b=_V[i], c=_T[i];
    while(li[a]+1<K[a].size() && K[a][li[a]+1]<=c) {
      ++li[a];
    }
    ll po=li[a];
    if(X[a][po][b]<INF) {
      ans[i]=X[a][po][b];
      continue;
    }
    ans[i]=X[a][po][b]-INF-c;
  }
  return ans;
}

Compilation message

escape_route.cpp: In function 'std::vector<long long int> calculate_necessary_time(int, int, ll, int, std::vector<int>, std::vector<int>, std::vector<long long int>, std::vector<long long int>, std::vector<int>, std::vector<int>, std::vector<long long int>)':
escape_route.cpp:5:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define rep(a, b) for(int a = 0; a < (b); ++a)
      |                                    ^
escape_route.cpp:69:5: note: in expansion of macro 'rep'
   69 |     rep(j, X[i].size()) {
      |     ^~~
escape_route.cpp:83:18: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |     while(li[a]+1<K[a].size() && K[a][li[a]+1]<=c) {
      |           ~~~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 65116 KB Output is correct
2 Correct 31 ms 65008 KB Output is correct
3 Correct 406 ms 65112 KB Output is correct
4 Correct 15 ms 64980 KB Output is correct
5 Correct 19 ms 64980 KB Output is correct
6 Correct 19 ms 65088 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 918 ms 180304 KB Output is correct
2 Correct 1016 ms 193476 KB Output is correct
3 Correct 965 ms 179196 KB Output is correct
4 Correct 979 ms 203016 KB Output is correct
5 Correct 966 ms 202740 KB Output is correct
6 Correct 14 ms 65116 KB Output is correct
7 Correct 880 ms 181532 KB Output is correct
8 Correct 549 ms 194348 KB Output is correct
9 Correct 924 ms 182876 KB Output is correct
10 Correct 922 ms 202508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 65116 KB Output is correct
2 Correct 31 ms 65008 KB Output is correct
3 Correct 406 ms 65112 KB Output is correct
4 Correct 15 ms 64980 KB Output is correct
5 Correct 19 ms 64980 KB Output is correct
6 Correct 19 ms 65088 KB Output is correct
7 Correct 918 ms 180304 KB Output is correct
8 Correct 1016 ms 193476 KB Output is correct
9 Correct 965 ms 179196 KB Output is correct
10 Correct 979 ms 203016 KB Output is correct
11 Correct 966 ms 202740 KB Output is correct
12 Correct 14 ms 65116 KB Output is correct
13 Correct 880 ms 181532 KB Output is correct
14 Correct 549 ms 194348 KB Output is correct
15 Correct 924 ms 182876 KB Output is correct
16 Correct 922 ms 202508 KB Output is correct
17 Correct 913 ms 185088 KB Output is correct
18 Correct 855 ms 182312 KB Output is correct
19 Correct 959 ms 196528 KB Output is correct
20 Correct 935 ms 182188 KB Output is correct
21 Correct 1054 ms 205700 KB Output is correct
22 Correct 1004 ms 205528 KB Output is correct
23 Correct 885 ms 183728 KB Output is correct
24 Correct 565 ms 196552 KB Output is correct
25 Correct 902 ms 185008 KB Output is correct
26 Correct 913 ms 205440 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 65116 KB Output is correct
2 Correct 31 ms 65008 KB Output is correct
3 Correct 406 ms 65112 KB Output is correct
4 Correct 15 ms 64980 KB Output is correct
5 Correct 19 ms 64980 KB Output is correct
6 Correct 19 ms 65088 KB Output is correct
7 Correct 918 ms 180304 KB Output is correct
8 Correct 1016 ms 193476 KB Output is correct
9 Correct 965 ms 179196 KB Output is correct
10 Correct 979 ms 203016 KB Output is correct
11 Correct 966 ms 202740 KB Output is correct
12 Correct 14 ms 65116 KB Output is correct
13 Correct 880 ms 181532 KB Output is correct
14 Correct 549 ms 194348 KB Output is correct
15 Correct 924 ms 182876 KB Output is correct
16 Correct 922 ms 202508 KB Output is correct
17 Correct 913 ms 185088 KB Output is correct
18 Correct 855 ms 182312 KB Output is correct
19 Correct 959 ms 196528 KB Output is correct
20 Correct 935 ms 182188 KB Output is correct
21 Correct 1054 ms 205700 KB Output is correct
22 Correct 1004 ms 205528 KB Output is correct
23 Correct 885 ms 183728 KB Output is correct
24 Correct 565 ms 196552 KB Output is correct
25 Correct 902 ms 185008 KB Output is correct
26 Correct 913 ms 205440 KB Output is correct
27 Correct 3756 ms 270384 KB Output is correct
28 Correct 3120 ms 253944 KB Output is correct
29 Correct 3402 ms 277364 KB Output is correct
30 Correct 3179 ms 260792 KB Output is correct
31 Correct 3593 ms 286760 KB Output is correct
32 Correct 3339 ms 287296 KB Output is correct
33 Correct 521 ms 197236 KB Output is correct
34 Correct 3600 ms 270512 KB Output is correct
35 Correct 3379 ms 287696 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 65116 KB Output is correct
2 Correct 31 ms 65008 KB Output is correct
3 Correct 406 ms 65112 KB Output is correct
4 Correct 15 ms 64980 KB Output is correct
5 Correct 19 ms 64980 KB Output is correct
6 Correct 19 ms 65088 KB Output is correct
7 Correct 918 ms 180304 KB Output is correct
8 Correct 1016 ms 193476 KB Output is correct
9 Correct 965 ms 179196 KB Output is correct
10 Correct 979 ms 203016 KB Output is correct
11 Correct 966 ms 202740 KB Output is correct
12 Correct 14 ms 65116 KB Output is correct
13 Correct 880 ms 181532 KB Output is correct
14 Correct 549 ms 194348 KB Output is correct
15 Correct 924 ms 182876 KB Output is correct
16 Correct 922 ms 202508 KB Output is correct
17 Correct 913 ms 185088 KB Output is correct
18 Correct 855 ms 182312 KB Output is correct
19 Correct 959 ms 196528 KB Output is correct
20 Correct 935 ms 182188 KB Output is correct
21 Correct 1054 ms 205700 KB Output is correct
22 Correct 1004 ms 205528 KB Output is correct
23 Correct 885 ms 183728 KB Output is correct
24 Correct 565 ms 196552 KB Output is correct
25 Correct 902 ms 185008 KB Output is correct
26 Correct 913 ms 205440 KB Output is correct
27 Correct 3756 ms 270384 KB Output is correct
28 Correct 3120 ms 253944 KB Output is correct
29 Correct 3402 ms 277364 KB Output is correct
30 Correct 3179 ms 260792 KB Output is correct
31 Correct 3593 ms 286760 KB Output is correct
32 Correct 3339 ms 287296 KB Output is correct
33 Correct 521 ms 197236 KB Output is correct
34 Correct 3600 ms 270512 KB Output is correct
35 Correct 3379 ms 287696 KB Output is correct
36 Execution timed out 9087 ms 286644 KB Time limit exceeded
37 Halted 0 ms 0 KB -