답안 #762365

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
762365 2023-06-21T10:43:10 Z aihay Sky Walking (IOI19_walk) C++14
24 / 100
2045 ms 539164 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define F first
#define S second
#define PB push_back
#define FR(i,a,b) for(int i=(a);i<(b);i++)
#define FOR(i,n) FR(i,0,n)
#define SZ(x) int(x.size())
const LL MAAX=1e18;
const int MOD=1e9+7;
const int MAX=1e9;

int n,m,s,g,x[100010],h[100010],l[100010],r[100010],y[100010],idxx,tim;
pair<int,int> srtb[100010];
pair<int,pair<int,int>> srts[100010];
LL cst[1000010];
vector<int> v[2000010];
map<pair<int,int>,int> mp;
pair<int,int> inter[2000010];
LL dijk(){
	for(int i=0;i<idxx;i++)
		cst[i]=MAAX;
	priority_queue<pair<LL,int>> pq;
	pq.push({0,1});
	while(pq.size()){
		LL cost=-pq.top().F;
		int idx=pq.top().S;
		pq.pop();
		if(cost>cst[idx])
			continue;
		cst[idx]=cost;
		if(idx==2)
			break;
		for(int i=0;i<v[idx].size();i++){
			int x1=inter[idx].F,x2=inter[v[idx][i]].F;
			int y1=inter[idx].S,y2=inter[v[idx][i]].S;
			LL ncst=cost+abs(x2-x1)+abs(y2-y1);
			int nidx=v[idx][i];
			if(ncst<cst[nidx]){
				cst[nidx]=ncst;
				pq.push({-ncst,nidx});
			}
		}
	}
	if(cst[2]==MAAX)
		cst[2]=-1;
	return cst[2];
}
map<int,vector<int>> vec;
LL min_distance(vector<int> X,vector<int> H,vector<int> L,vector<int> R,vector<int> Y,int S,int G){
	tim=clock();
	n=X.size();
	m=L.size();
	s=S,g=G;
	for(int i=0;i<n;i++){
		x[i]=X[i];
		h[i]=H[i];
		vec[x[i]].PB(0);
		srtb[i]={-h[i],x[i]};
	}
	sort(srtb,srtb+n);
	idxx++;
	mp[{x[s],0}]=idxx++;
	inter[1]={x[s],0};
	mp[{x[g],0}]=idxx++;
	inter[2]={x[g],0};
	for(int i=0;i<n;i++){
		srtb[i].F*=-1;
		if(mp[{x[i],0}]==0){
			mp[{x[i],0}]=idxx++;
			inter[idxx-1]={x[i],0};
		}
	}
	for(int i=0;i<m;i++){
		l[i]=L[i];
		r[i]=R[i];
		y[i]=Y[i];
		if(r[i]-l[i]>100)
			srts[i]={-y[i],{x[l[i]],x[r[i]]}};
		else{
			srts[i]={1,{-1,-1}};
			int lst=-1;
			for(int j=l[i];j<=r[i];j++){
				if(h[j]<y[i])
					continue;
				int xx=mp[{x[j],y[i]}];
				if(xx==0){
					mp[{x[j],y[i]}]=xx=idxx++;
					inter[idxx-1]={x[j],y[i]};
					vec[x[j]].PB(y[i]);
				}
				if(~lst){
					v[lst].PB(xx);
					v[xx].PB(lst);
				}
				lst=xx;
			}
		}
	}
	sort(srts,srts+m);
	set<int> curst;
	int idx=0;
	for(int i=0;i<m;i++){
		if(srts[i].F==1||clock()-tim>1000000)
			break;
		srts[i].F=-srts[i].F;
		while(idx<n&&srtb[idx].F>=srts[i].F)
			curst.insert(srtb[idx++].S);
		int lst=-1;
		for(set<int>::iterator j=curst.lower_bound(srts[i].S.F);j!=curst.end()&&(*j)<=srts[i].S.S;j++){
			int xx=0;
			if(xx==0){
				mp[{(*j),srts[i].F}]=xx=idxx++;
				inter[idxx-1]={(*j),srts[i].F};
				vec[(*j)].PB(srts[i].F);
			}
			if(~lst){
				v[lst].PB(xx);
				v[xx].PB(lst);
			}
			lst=xx;
		}
	}
	for(int i=0;i<n;i++){
		sort(vec[x[i]].begin(),vec[x[i]].end());
		for(int j=1;j<vec[x[i]].size();j++){
			v[mp[{x[i],vec[x[i]][j]}]].PB(mp[{x[i],vec[x[i]][j-1]}]);
			v[mp[{x[i],vec[x[i]][j-1]}]].PB(mp[{x[i],vec[x[i]][j]}]);
		}
	}
	return dijk();
}

Compilation message

walk.cpp: In function 'LL dijk()':
walk.cpp:35:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |   for(int i=0;i<v[idx].size();i++){
      |               ~^~~~~~~~~~~~~~
walk.cpp: In function 'LL min_distance(std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>, int, int)':
walk.cpp:127:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  127 |   for(int j=1;j<vec[x[i]].size();j++){
      |               ~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 47316 KB Output is correct
2 Correct 21 ms 47316 KB Output is correct
3 Correct 22 ms 47276 KB Output is correct
4 Correct 22 ms 47328 KB Output is correct
5 Correct 23 ms 47328 KB Output is correct
6 Correct 22 ms 47316 KB Output is correct
7 Correct 23 ms 47316 KB Output is correct
8 Correct 22 ms 47316 KB Output is correct
9 Correct 26 ms 47332 KB Output is correct
10 Correct 21 ms 47328 KB Output is correct
11 Correct 23 ms 47300 KB Output is correct
12 Correct 20 ms 47300 KB Output is correct
13 Correct 21 ms 47316 KB Output is correct
14 Correct 20 ms 47232 KB Output is correct
15 Correct 21 ms 47308 KB Output is correct
16 Correct 23 ms 47316 KB Output is correct
17 Correct 21 ms 47428 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 47216 KB Output is correct
2 Correct 19 ms 47316 KB Output is correct
3 Correct 1085 ms 135888 KB Output is correct
4 Correct 1495 ms 159244 KB Output is correct
5 Correct 1162 ms 149896 KB Output is correct
6 Correct 1018 ms 141148 KB Output is correct
7 Correct 1162 ms 150224 KB Output is correct
8 Correct 1384 ms 158592 KB Output is correct
9 Correct 1288 ms 140820 KB Output is correct
10 Correct 2045 ms 191472 KB Output is correct
11 Correct 701 ms 102116 KB Output is correct
12 Correct 588 ms 98912 KB Output is correct
13 Correct 1889 ms 176820 KB Output is correct
14 Correct 512 ms 101952 KB Output is correct
15 Correct 572 ms 103572 KB Output is correct
16 Correct 588 ms 103352 KB Output is correct
17 Correct 573 ms 98000 KB Output is correct
18 Correct 411 ms 100136 KB Output is correct
19 Correct 44 ms 49996 KB Output is correct
20 Correct 216 ms 75192 KB Output is correct
21 Correct 554 ms 94448 KB Output is correct
22 Correct 554 ms 101028 KB Output is correct
23 Correct 686 ms 113280 KB Output is correct
24 Correct 618 ms 103800 KB Output is correct
25 Correct 536 ms 97352 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 141 ms 58720 KB Output is correct
2 Runtime error 1582 ms 539164 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 141 ms 58720 KB Output is correct
2 Runtime error 1582 ms 539164 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 47316 KB Output is correct
2 Correct 21 ms 47316 KB Output is correct
3 Correct 22 ms 47276 KB Output is correct
4 Correct 22 ms 47328 KB Output is correct
5 Correct 23 ms 47328 KB Output is correct
6 Correct 22 ms 47316 KB Output is correct
7 Correct 23 ms 47316 KB Output is correct
8 Correct 22 ms 47316 KB Output is correct
9 Correct 26 ms 47332 KB Output is correct
10 Correct 21 ms 47328 KB Output is correct
11 Correct 23 ms 47300 KB Output is correct
12 Correct 20 ms 47300 KB Output is correct
13 Correct 21 ms 47316 KB Output is correct
14 Correct 20 ms 47232 KB Output is correct
15 Correct 21 ms 47308 KB Output is correct
16 Correct 23 ms 47316 KB Output is correct
17 Correct 21 ms 47428 KB Output is correct
18 Correct 20 ms 47216 KB Output is correct
19 Correct 19 ms 47316 KB Output is correct
20 Correct 1085 ms 135888 KB Output is correct
21 Correct 1495 ms 159244 KB Output is correct
22 Correct 1162 ms 149896 KB Output is correct
23 Correct 1018 ms 141148 KB Output is correct
24 Correct 1162 ms 150224 KB Output is correct
25 Correct 1384 ms 158592 KB Output is correct
26 Correct 1288 ms 140820 KB Output is correct
27 Correct 2045 ms 191472 KB Output is correct
28 Correct 701 ms 102116 KB Output is correct
29 Correct 588 ms 98912 KB Output is correct
30 Correct 1889 ms 176820 KB Output is correct
31 Correct 512 ms 101952 KB Output is correct
32 Correct 572 ms 103572 KB Output is correct
33 Correct 588 ms 103352 KB Output is correct
34 Correct 573 ms 98000 KB Output is correct
35 Correct 411 ms 100136 KB Output is correct
36 Correct 44 ms 49996 KB Output is correct
37 Correct 216 ms 75192 KB Output is correct
38 Correct 554 ms 94448 KB Output is correct
39 Correct 554 ms 101028 KB Output is correct
40 Correct 686 ms 113280 KB Output is correct
41 Correct 618 ms 103800 KB Output is correct
42 Correct 536 ms 97352 KB Output is correct
43 Correct 141 ms 58720 KB Output is correct
44 Runtime error 1582 ms 539164 KB Execution killed with signal 11
45 Halted 0 ms 0 KB -