답안 #787501

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
787501 2023-07-19T08:38:01 Z NothingXD Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
175 ms 20076 KB
#include "railroad.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef complex<double> point;

void debug_out(){cerr << endl;}

template<typename Head, typename... Tail>
void debug_out(Head H, Tail... T){
	cerr << H << ' ';
	debug_out(T...);
}

#define debug(...) cerr << "(" << #__VA_ARGS__ << "): ", debug_out(__VA_ARGS__)
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define MP(x, y) make_pair(x, y)

const int maxn = 5e5 + 10;

int n, val[maxn], par[maxn];
vector<int> num;

int getpar(int v){
	return (par[v] == -1? v: par[v] = getpar(par[v]));
}

bool merge(int u, int v){
	if ((u = getpar(u)) == (v = getpar(v))) return false;
	par[u] = v;
	return true;
}

long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
	memset(par, -1, sizeof par);
	n = s.size();
	ll k = 0;
	for (int i = 0; i < n; i++){
		num.push_back(s[i]);
		num.push_back(t[i]);
		k += t[i] - s[i];
	}
	k -= 1e9 + 7;
	num.push_back(0);
	num.push_back(1e9 + 7);
	sort(all(num));
	num.resize(distance(num.begin(), unique(all(num))));
	for (int i = 0; i < n; i++){
		int ids = lower_bound(all(num), s[i]) - num.begin();
		int idt = lower_bound(all(num), t[i]) - num.begin();
		merge(ids, idt);
		val[ids]++;
		val[idt]--;
	}
	n = num.size();
	ll ans = 0;
	int cnt = 0;
	vector<pair<int,pii>> edge;
	for (int i = 1; i < n; i++){
		if (cnt <= 0){
			ans += 1ll * (1-cnt) * (num[i] - num[i-1]);
			merge(i, i-1);
		}
		else if (cnt > 1){
			ans += 1ll * (cnt-1) * (num[i] - num[i-1]);
			merge(i, i-1);
		}
		cnt += val[i];
		edge.push_back({(num[i] - num[i-1]) * 2, {i-1, i}});
	}
	sort(all(edge));
	for (auto x: edge){
		if (merge(x.S.F, x.S.S)) ans += x.F;
	}


	ans = (ans - k) / 2 + k;

    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2260 KB n = 2
2 Correct 1 ms 2260 KB n = 2
3 Correct 1 ms 2260 KB n = 2
4 Correct 1 ms 2260 KB n = 2
5 Correct 1 ms 2260 KB n = 2
6 Correct 1 ms 2260 KB n = 2
7 Correct 1 ms 2260 KB n = 3
8 Correct 1 ms 2260 KB n = 3
9 Correct 1 ms 2260 KB n = 3
10 Correct 1 ms 2260 KB n = 8
11 Correct 2 ms 2260 KB n = 8
12 Correct 1 ms 2260 KB n = 8
13 Correct 1 ms 2260 KB n = 8
14 Correct 1 ms 2260 KB n = 8
15 Correct 1 ms 2260 KB n = 8
16 Correct 1 ms 2260 KB n = 8
17 Correct 1 ms 2260 KB n = 8
18 Correct 1 ms 2260 KB n = 8
19 Correct 1 ms 2260 KB n = 3
20 Correct 1 ms 2260 KB n = 7
21 Correct 1 ms 2260 KB n = 8
22 Correct 1 ms 2260 KB n = 8
23 Correct 1 ms 2260 KB n = 8
24 Correct 1 ms 2260 KB n = 8
25 Correct 1 ms 2260 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2260 KB n = 2
2 Correct 1 ms 2260 KB n = 2
3 Correct 1 ms 2260 KB n = 2
4 Correct 1 ms 2260 KB n = 2
5 Correct 1 ms 2260 KB n = 2
6 Correct 1 ms 2260 KB n = 2
7 Correct 1 ms 2260 KB n = 3
8 Correct 1 ms 2260 KB n = 3
9 Correct 1 ms 2260 KB n = 3
10 Correct 1 ms 2260 KB n = 8
11 Correct 2 ms 2260 KB n = 8
12 Correct 1 ms 2260 KB n = 8
13 Correct 1 ms 2260 KB n = 8
14 Correct 1 ms 2260 KB n = 8
15 Correct 1 ms 2260 KB n = 8
16 Correct 1 ms 2260 KB n = 8
17 Correct 1 ms 2260 KB n = 8
18 Correct 1 ms 2260 KB n = 8
19 Correct 1 ms 2260 KB n = 3
20 Correct 1 ms 2260 KB n = 7
21 Correct 1 ms 2260 KB n = 8
22 Correct 1 ms 2260 KB n = 8
23 Correct 1 ms 2260 KB n = 8
24 Correct 1 ms 2260 KB n = 8
25 Correct 1 ms 2260 KB n = 8
26 Correct 1 ms 2260 KB n = 8
27 Correct 1 ms 2260 KB n = 8
28 Correct 1 ms 2260 KB n = 8
29 Correct 1 ms 2260 KB n = 16
30 Correct 1 ms 2260 KB n = 16
31 Correct 1 ms 2260 KB n = 16
32 Correct 1 ms 2260 KB n = 16
33 Correct 1 ms 2260 KB n = 16
34 Correct 1 ms 2260 KB n = 16
35 Correct 1 ms 2260 KB n = 16
36 Correct 1 ms 2260 KB n = 15
37 Correct 1 ms 2260 KB n = 8
38 Correct 1 ms 2260 KB n = 16
39 Correct 1 ms 2260 KB n = 16
40 Correct 1 ms 2260 KB n = 9
41 Correct 1 ms 2260 KB n = 16
42 Correct 1 ms 2260 KB n = 16
43 Correct 1 ms 2212 KB n = 16
44 Correct 2 ms 2260 KB n = 9
45 Correct 1 ms 2260 KB n = 15
46 Correct 1 ms 2260 KB n = 16
47 Correct 2 ms 2260 KB n = 16
48 Correct 1 ms 2260 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 163 ms 16208 KB n = 199999
2 Correct 172 ms 16736 KB n = 199991
3 Correct 165 ms 16760 KB n = 199993
4 Correct 145 ms 15224 KB n = 152076
5 Correct 73 ms 9552 KB n = 93249
6 Correct 146 ms 16468 KB n = 199910
7 Correct 159 ms 16692 KB n = 199999
8 Correct 144 ms 16556 KB n = 199997
9 Correct 152 ms 15848 KB n = 171294
10 Correct 115 ms 14848 KB n = 140872
11 Correct 147 ms 18244 KB n = 199886
12 Correct 155 ms 19380 KB n = 199996
13 Correct 149 ms 18764 KB n = 200000
14 Correct 167 ms 19244 KB n = 199998
15 Correct 159 ms 19128 KB n = 200000
16 Correct 162 ms 19500 KB n = 199998
17 Correct 159 ms 20044 KB n = 200000
18 Correct 158 ms 19528 KB n = 190000
19 Correct 145 ms 18952 KB n = 177777
20 Correct 76 ms 11176 KB n = 100000
21 Correct 174 ms 20076 KB n = 200000
22 Correct 174 ms 20052 KB n = 200000
23 Correct 162 ms 20024 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2260 KB n = 2
2 Correct 1 ms 2260 KB n = 2
3 Correct 1 ms 2260 KB n = 2
4 Correct 1 ms 2260 KB n = 2
5 Correct 1 ms 2260 KB n = 2
6 Correct 1 ms 2260 KB n = 2
7 Correct 1 ms 2260 KB n = 3
8 Correct 1 ms 2260 KB n = 3
9 Correct 1 ms 2260 KB n = 3
10 Correct 1 ms 2260 KB n = 8
11 Correct 2 ms 2260 KB n = 8
12 Correct 1 ms 2260 KB n = 8
13 Correct 1 ms 2260 KB n = 8
14 Correct 1 ms 2260 KB n = 8
15 Correct 1 ms 2260 KB n = 8
16 Correct 1 ms 2260 KB n = 8
17 Correct 1 ms 2260 KB n = 8
18 Correct 1 ms 2260 KB n = 8
19 Correct 1 ms 2260 KB n = 3
20 Correct 1 ms 2260 KB n = 7
21 Correct 1 ms 2260 KB n = 8
22 Correct 1 ms 2260 KB n = 8
23 Correct 1 ms 2260 KB n = 8
24 Correct 1 ms 2260 KB n = 8
25 Correct 1 ms 2260 KB n = 8
26 Correct 1 ms 2260 KB n = 8
27 Correct 1 ms 2260 KB n = 8
28 Correct 1 ms 2260 KB n = 8
29 Correct 1 ms 2260 KB n = 16
30 Correct 1 ms 2260 KB n = 16
31 Correct 1 ms 2260 KB n = 16
32 Correct 1 ms 2260 KB n = 16
33 Correct 1 ms 2260 KB n = 16
34 Correct 1 ms 2260 KB n = 16
35 Correct 1 ms 2260 KB n = 16
36 Correct 1 ms 2260 KB n = 15
37 Correct 1 ms 2260 KB n = 8
38 Correct 1 ms 2260 KB n = 16
39 Correct 1 ms 2260 KB n = 16
40 Correct 1 ms 2260 KB n = 9
41 Correct 1 ms 2260 KB n = 16
42 Correct 1 ms 2260 KB n = 16
43 Correct 1 ms 2212 KB n = 16
44 Correct 2 ms 2260 KB n = 9
45 Correct 1 ms 2260 KB n = 15
46 Correct 1 ms 2260 KB n = 16
47 Correct 2 ms 2260 KB n = 16
48 Correct 1 ms 2260 KB n = 16
49 Correct 163 ms 16208 KB n = 199999
50 Correct 172 ms 16736 KB n = 199991
51 Correct 165 ms 16760 KB n = 199993
52 Correct 145 ms 15224 KB n = 152076
53 Correct 73 ms 9552 KB n = 93249
54 Correct 146 ms 16468 KB n = 199910
55 Correct 159 ms 16692 KB n = 199999
56 Correct 144 ms 16556 KB n = 199997
57 Correct 152 ms 15848 KB n = 171294
58 Correct 115 ms 14848 KB n = 140872
59 Correct 147 ms 18244 KB n = 199886
60 Correct 155 ms 19380 KB n = 199996
61 Correct 149 ms 18764 KB n = 200000
62 Correct 167 ms 19244 KB n = 199998
63 Correct 159 ms 19128 KB n = 200000
64 Correct 162 ms 19500 KB n = 199998
65 Correct 159 ms 20044 KB n = 200000
66 Correct 158 ms 19528 KB n = 190000
67 Correct 145 ms 18952 KB n = 177777
68 Correct 76 ms 11176 KB n = 100000
69 Correct 174 ms 20076 KB n = 200000
70 Correct 174 ms 20052 KB n = 200000
71 Correct 162 ms 20024 KB n = 200000
72 Correct 163 ms 20048 KB n = 200000
73 Correct 171 ms 20024 KB n = 200000
74 Correct 162 ms 20072 KB n = 200000
75 Correct 161 ms 20076 KB n = 200000
76 Correct 160 ms 20072 KB n = 200000
77 Correct 124 ms 16316 KB n = 200000
78 Correct 126 ms 16168 KB n = 200000
79 Correct 154 ms 19088 KB n = 184307
80 Correct 58 ms 9948 KB n = 76040
81 Correct 152 ms 18688 KB n = 199981
82 Correct 157 ms 19380 KB n = 199994
83 Correct 147 ms 18760 KB n = 199996
84 Correct 158 ms 19252 KB n = 199998
85 Correct 161 ms 19112 KB n = 200000
86 Correct 164 ms 19572 KB n = 199998
87 Correct 159 ms 20016 KB n = 200000
88 Correct 162 ms 20072 KB n = 200000
89 Correct 164 ms 20012 KB n = 200000
90 Correct 175 ms 20028 KB n = 200000
91 Correct 164 ms 20076 KB n = 200000
92 Correct 168 ms 20056 KB n = 200000