답안 #648330

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
648330 2022-10-06T06:58:02 Z jamezzz Roller Coaster Railroad (IOI16_railroad) C++17
34 / 100
2000 ms 23752 KB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> ii;
#define fi first
#define se second
#define INF 1023456789
#define LINF 1023456789123456789

int n;
ll memo[20][65540];
vector<int> s,t;

ll dp(int i,int msk){
	if(memo[i][msk]!=-1)return memo[i][msk];
	if(msk==(1<<n)-1)return 0;
	ll res=LINF;
	for(int j=0;j<n;++j){
		if((msk&(1<<j))!=0)continue;
		res=min(res,max(t[i]-s[j],0)+dp(j,msk^(1<<j)));
	}
	return memo[i][msk]=res;
}

ll plan_roller_coaster(vector<int> _s,vector<int> _t){
	s=_s,t=_t;
    n=s.size();
    if(n<=16){
		memset(memo,-1,sizeof memo);
		ll ans=LINF;
		for(int i=0;i<n;++i){
			ans=min(ans,dp(i,1<<i));
		}
		return ans;
	}
	else{
		set<ii> ss,tt,sss;
		for(int i=0;i<n;++i){
			ss.insert({s[i],i});
			tt.insert({t[i],i});
		}
		while(ss.size()!=1){
			while(!tt.empty()&&(*tt.begin()).fi<=(*ss.begin()).fi){
				int i=(*tt.begin()).se;
				sss.insert({s[i],i});
				tt.erase(tt.begin());
			}
			if(sss.empty()||(sss.size()==1&&(*sss.begin()).se==(*ss.begin()).se)){
				if((*--ss.end()).fi!=INF){
					int i=(*ss.begin()).se;
					ss.erase(ss.begin());
					sss.erase({s[i],i});
					tt.insert({t[i],i});
					ss.insert({INF,i});
				}
				else{
					return 1;
				}
			}
			else{
				//take the one with lowest s
				auto it=sss.begin();
				if((*sss.begin()).se==(*ss.begin()).se){
					it=next(it);
				}
				auto[_,i]=*ss.begin();
				auto[__,j]=*it;
				ss.erase(ss.begin());
				ss.erase({s[j],j});
				sss.erase(it);
				//new s[j]->t[i];
				t[j]=t[i];
				ss.insert({s[j],j});
				tt.insert({t[j],j});
			}
		}
		return 0;
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 10452 KB n = 2
2 Correct 5 ms 10452 KB n = 2
3 Correct 4 ms 10452 KB n = 2
4 Correct 5 ms 10452 KB n = 2
5 Correct 5 ms 10524 KB n = 2
6 Correct 5 ms 10520 KB n = 2
7 Correct 5 ms 10452 KB n = 3
8 Correct 4 ms 10452 KB n = 3
9 Correct 5 ms 10452 KB n = 3
10 Correct 5 ms 10452 KB n = 8
11 Correct 5 ms 10452 KB n = 8
12 Correct 5 ms 10452 KB n = 8
13 Correct 5 ms 10452 KB n = 8
14 Correct 4 ms 10452 KB n = 8
15 Correct 5 ms 10452 KB n = 8
16 Correct 4 ms 10452 KB n = 8
17 Correct 5 ms 10452 KB n = 8
18 Correct 5 ms 10452 KB n = 8
19 Correct 5 ms 10452 KB n = 3
20 Correct 4 ms 10476 KB n = 7
21 Correct 5 ms 10452 KB n = 8
22 Correct 5 ms 10452 KB n = 8
23 Correct 4 ms 10452 KB n = 8
24 Correct 7 ms 10452 KB n = 8
25 Correct 5 ms 10452 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 10452 KB n = 2
2 Correct 5 ms 10452 KB n = 2
3 Correct 4 ms 10452 KB n = 2
4 Correct 5 ms 10452 KB n = 2
5 Correct 5 ms 10524 KB n = 2
6 Correct 5 ms 10520 KB n = 2
7 Correct 5 ms 10452 KB n = 3
8 Correct 4 ms 10452 KB n = 3
9 Correct 5 ms 10452 KB n = 3
10 Correct 5 ms 10452 KB n = 8
11 Correct 5 ms 10452 KB n = 8
12 Correct 5 ms 10452 KB n = 8
13 Correct 5 ms 10452 KB n = 8
14 Correct 4 ms 10452 KB n = 8
15 Correct 5 ms 10452 KB n = 8
16 Correct 4 ms 10452 KB n = 8
17 Correct 5 ms 10452 KB n = 8
18 Correct 5 ms 10452 KB n = 8
19 Correct 5 ms 10452 KB n = 3
20 Correct 4 ms 10476 KB n = 7
21 Correct 5 ms 10452 KB n = 8
22 Correct 5 ms 10452 KB n = 8
23 Correct 4 ms 10452 KB n = 8
24 Correct 7 ms 10452 KB n = 8
25 Correct 5 ms 10452 KB n = 8
26 Correct 4 ms 10452 KB n = 8
27 Correct 6 ms 10560 KB n = 8
28 Correct 5 ms 10452 KB n = 8
29 Correct 47 ms 10536 KB n = 16
30 Correct 45 ms 10536 KB n = 16
31 Correct 44 ms 10536 KB n = 16
32 Correct 43 ms 10452 KB n = 16
33 Correct 45 ms 10452 KB n = 16
34 Correct 48 ms 10532 KB n = 16
35 Correct 40 ms 10452 KB n = 16
36 Correct 21 ms 10452 KB n = 15
37 Correct 6 ms 10452 KB n = 8
38 Correct 50 ms 10452 KB n = 16
39 Correct 44 ms 10452 KB n = 16
40 Correct 5 ms 10452 KB n = 9
41 Correct 46 ms 10540 KB n = 16
42 Correct 42 ms 10452 KB n = 16
43 Correct 48 ms 10548 KB n = 16
44 Correct 5 ms 10452 KB n = 9
45 Correct 22 ms 10556 KB n = 15
46 Correct 52 ms 10532 KB n = 16
47 Correct 44 ms 10452 KB n = 16
48 Correct 43 ms 10580 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2074 ms 23752 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 10452 KB n = 2
2 Correct 5 ms 10452 KB n = 2
3 Correct 4 ms 10452 KB n = 2
4 Correct 5 ms 10452 KB n = 2
5 Correct 5 ms 10524 KB n = 2
6 Correct 5 ms 10520 KB n = 2
7 Correct 5 ms 10452 KB n = 3
8 Correct 4 ms 10452 KB n = 3
9 Correct 5 ms 10452 KB n = 3
10 Correct 5 ms 10452 KB n = 8
11 Correct 5 ms 10452 KB n = 8
12 Correct 5 ms 10452 KB n = 8
13 Correct 5 ms 10452 KB n = 8
14 Correct 4 ms 10452 KB n = 8
15 Correct 5 ms 10452 KB n = 8
16 Correct 4 ms 10452 KB n = 8
17 Correct 5 ms 10452 KB n = 8
18 Correct 5 ms 10452 KB n = 8
19 Correct 5 ms 10452 KB n = 3
20 Correct 4 ms 10476 KB n = 7
21 Correct 5 ms 10452 KB n = 8
22 Correct 5 ms 10452 KB n = 8
23 Correct 4 ms 10452 KB n = 8
24 Correct 7 ms 10452 KB n = 8
25 Correct 5 ms 10452 KB n = 8
26 Correct 4 ms 10452 KB n = 8
27 Correct 6 ms 10560 KB n = 8
28 Correct 5 ms 10452 KB n = 8
29 Correct 47 ms 10536 KB n = 16
30 Correct 45 ms 10536 KB n = 16
31 Correct 44 ms 10536 KB n = 16
32 Correct 43 ms 10452 KB n = 16
33 Correct 45 ms 10452 KB n = 16
34 Correct 48 ms 10532 KB n = 16
35 Correct 40 ms 10452 KB n = 16
36 Correct 21 ms 10452 KB n = 15
37 Correct 6 ms 10452 KB n = 8
38 Correct 50 ms 10452 KB n = 16
39 Correct 44 ms 10452 KB n = 16
40 Correct 5 ms 10452 KB n = 9
41 Correct 46 ms 10540 KB n = 16
42 Correct 42 ms 10452 KB n = 16
43 Correct 48 ms 10548 KB n = 16
44 Correct 5 ms 10452 KB n = 9
45 Correct 22 ms 10556 KB n = 15
46 Correct 52 ms 10532 KB n = 16
47 Correct 44 ms 10452 KB n = 16
48 Correct 43 ms 10580 KB n = 16
49 Execution timed out 2074 ms 23752 KB Time limit exceeded
50 Halted 0 ms 0 KB -