답안 #287562

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
287562 2020-08-31T20:05:44 Z DanerZein Sky Walking (IOI19_walk) C++14
10 / 100
4000 ms 755228 KB
#include <bits/stdc++.h>
#include "walk.h"
#define msize 2500000
#define MAX 9223372036854775806
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<ii> vi;
ll dist[msize];
ll isq[msize];
vector<vi> G;
void dijktra(ll u){
  memset(isq,0,sizeof isq);
  for(int i=0;i<=msize;i++){
    dist[i]=MAX;
  }
  priority_queue<ii,vi,greater<ii> > pq;
  dist[u]=0;
  isq[u]=1;
  pq.push(ii(0,u));
  while(!pq.empty()){
    ll x=pq.top().second;
    ll di=pq.top().first;
    pq.pop();
    isq[x]=0;
    // if(di>dist[x]) continue;
    for(auto &v:G[x]){
      ll w=v.first;
      if(dist[v.second]>dist[x]+w){
	dist[v.second]=dist[x]+w;
	if(isq[v.second]==0){
	  pq.push(ii(dist[v.second],v.second));
	  isq[v.second]=1;
	}
      }
    }
  }
}
long long min_distance(std::vector<int> x, std::vector<int> h, std::vector<int> l, std::vector<int> r, std::vector<int> y, int s, int g) {
  ll no;
  no=0;
  map<ii,ll> m;
  G.resize(msize);
  vi aux;
  for(int i=0;i<y.size();i++){
    ll ant=-1,id;
    for(int j=l[i];j<=r[i];j++){
      if(h[j]>=y[i]){
	if(m[ii(x[j],y[i])]==0){
	  no++;
	  m[ii(x[j],y[i])]=no;
	}
	aux.push_back(ii(x[j],y[i]));
	if(ant==-1){
	  ant=m[ii(x[j],y[i])];
	  id=j;
	}
	else{
	  ll dis=abs(x[j]-x[id]);
	  ll u=m[ii(x[j],y[i])];
	  G[ant].push_back(ii(dis,u));
	  G[u].push_back(ii(dis,ant));
	  ant=u;
	  id=j;
      }
      }
    }
  }
  if(m[ii(x[s],0)]==0){
    no++;
    m[ii(x[s],0)]=no;
    aux.push_back(ii(x[s],0));
  }
  if(m[ii(x[g],0)]==0){
    no++;
    m[ii(x[g],0)]=no;
    aux.push_back(ii(x[g],0));                       
  }
  sort(aux.begin(),aux.end());
  for(int i=1;i<aux.size();i++){
    if(aux[i].first==aux[i-1].first){
      int u=m[ii(aux[i].first,aux[i].second)];
      int v=m[ii(aux[i-1].first,aux[i-1].second)];
      int w=abs(aux[i].second-aux[i-1].second);
      G[u].push_back(ii(w,v));
      G[v].push_back(ii(w,u));
    }
  }
  dijktra(m[ii(x[s],0)]);
   if(dist[m[ii(x[g],0)]]==MAX) dist[m[ii(x[g],0)]]=-1;
  ll res=dist[m[ii(x[g],0)]];
  return res;
}

Compilation message

walk.cpp: In function 'void dijktra(ll)':
walk.cpp:23:8: warning: unused variable 'di' [-Wunused-variable]
   23 |     ll di=pq.top().first;
      |        ^~
walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:45:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |   for(int i=0;i<y.size();i++){
      |               ~^~~~~~~~~
walk.cpp:80:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   80 |   for(int i=1;i<aux.size();i++){
      |               ~^~~~~~~~~~~
walk.cpp: In function 'void dijktra(ll)':
walk.cpp:15:12: warning: iteration 2500000 invokes undefined behavior [-Waggressive-loop-optimizations]
   15 |     dist[i]=MAX;
      |            ^
walk.cpp:14:16: note: within this loop
   14 |   for(int i=0;i<=msize;i++){
      |                ^
walk.cpp: In function 'long long int min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:59:24: warning: 'id' may be used uninitialized in this function [-Wmaybe-uninitialized]
   59 |    ll dis=abs(x[j]-x[id]);
      |                        ^
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 98168 KB Output is correct
2 Correct 61 ms 98168 KB Output is correct
3 Correct 62 ms 98168 KB Output is correct
4 Correct 62 ms 98168 KB Output is correct
5 Correct 63 ms 98296 KB Output is correct
6 Correct 65 ms 98296 KB Output is correct
7 Correct 62 ms 98296 KB Output is correct
8 Correct 62 ms 98296 KB Output is correct
9 Correct 64 ms 98168 KB Output is correct
10 Correct 66 ms 98296 KB Output is correct
11 Correct 64 ms 98296 KB Output is correct
12 Correct 63 ms 98168 KB Output is correct
13 Correct 62 ms 98168 KB Output is correct
14 Correct 62 ms 98168 KB Output is correct
15 Correct 62 ms 98168 KB Output is correct
16 Correct 63 ms 98168 KB Output is correct
17 Correct 63 ms 98424 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 98168 KB Output is correct
2 Correct 63 ms 98168 KB Output is correct
3 Correct 1582 ms 239768 KB Output is correct
4 Correct 1365 ms 236356 KB Output is correct
5 Correct 1049 ms 216868 KB Output is correct
6 Correct 1597 ms 199888 KB Output is correct
7 Correct 1020 ms 217160 KB Output is correct
8 Correct 2059 ms 280612 KB Output is correct
9 Correct 1215 ms 216520 KB Output is correct
10 Correct 1936 ms 299044 KB Output is correct
11 Correct 807 ms 165464 KB Output is correct
12 Correct 472 ms 128736 KB Output is correct
13 Correct 1660 ms 271256 KB Output is correct
14 Correct 3854 ms 128208 KB Output is correct
15 Correct 2245 ms 128740 KB Output is correct
16 Correct 584 ms 131680 KB Output is correct
17 Correct 560 ms 130784 KB Output is correct
18 Execution timed out 4070 ms 69568 KB Time limit exceeded
19 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 228 ms 114408 KB Output is correct
2 Runtime error 2861 ms 755228 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 228 ms 114408 KB Output is correct
2 Runtime error 2861 ms 755228 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 98168 KB Output is correct
2 Correct 61 ms 98168 KB Output is correct
3 Correct 62 ms 98168 KB Output is correct
4 Correct 62 ms 98168 KB Output is correct
5 Correct 63 ms 98296 KB Output is correct
6 Correct 65 ms 98296 KB Output is correct
7 Correct 62 ms 98296 KB Output is correct
8 Correct 62 ms 98296 KB Output is correct
9 Correct 64 ms 98168 KB Output is correct
10 Correct 66 ms 98296 KB Output is correct
11 Correct 64 ms 98296 KB Output is correct
12 Correct 63 ms 98168 KB Output is correct
13 Correct 62 ms 98168 KB Output is correct
14 Correct 62 ms 98168 KB Output is correct
15 Correct 62 ms 98168 KB Output is correct
16 Correct 63 ms 98168 KB Output is correct
17 Correct 63 ms 98424 KB Output is correct
18 Correct 63 ms 98168 KB Output is correct
19 Correct 63 ms 98168 KB Output is correct
20 Correct 1582 ms 239768 KB Output is correct
21 Correct 1365 ms 236356 KB Output is correct
22 Correct 1049 ms 216868 KB Output is correct
23 Correct 1597 ms 199888 KB Output is correct
24 Correct 1020 ms 217160 KB Output is correct
25 Correct 2059 ms 280612 KB Output is correct
26 Correct 1215 ms 216520 KB Output is correct
27 Correct 1936 ms 299044 KB Output is correct
28 Correct 807 ms 165464 KB Output is correct
29 Correct 472 ms 128736 KB Output is correct
30 Correct 1660 ms 271256 KB Output is correct
31 Correct 3854 ms 128208 KB Output is correct
32 Correct 2245 ms 128740 KB Output is correct
33 Correct 584 ms 131680 KB Output is correct
34 Correct 560 ms 130784 KB Output is correct
35 Execution timed out 4070 ms 69568 KB Time limit exceeded
36 Halted 0 ms 0 KB -