답안 #721232

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
721232 2023-04-10T14:16:08 Z n1k Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
320 ms 20276 KB
#include <bits/stdc++.h>
#include "railroad.h"

#define ll long long
#define vt vector
#define pb push_back
#define ar array
#define all(x) (x).begin(), (x).end()
#define sz(x) (x).size()

using namespace std;

/*
 1. simplify
 2. add new elements
 3. brute force solution
 4. optimize
 5. start implementing
*/

// --- templates ---
// --- code ---

vt<int> p;

int find(int u){
	if(p[u] == u){
		return u;
	}
	return p[u] = find(p[u]);
}

bool join(int u, int v){
	if((u = find(u)) == (v = find(v))){
		return false;
	}
	p[u] = v;
	return true;
}

long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
	int n = sz(s);
	vt<int> comp = s;
	comp.insert(comp.end(), all(t));

	sort(all(comp));

	vt<int> a(sz(comp));
	p.resize(sz(comp));
	iota(all(p), 0);

	for(int i = 0; i < n; i++){
		s[i] = lower_bound(all(comp), s[i]) - comp.begin();
		t[i] = lower_bound(all(comp), t[i]) - comp.begin();

		a[s[i]]++;
		a[t[i]]--;

		join(s[i], t[i]);
	}
	ll ans = 0;
	vt<ar<int, 2>> e;
	for(int i = 0; i < sz(comp) - 1; i++){
		a[i + 1] += a[i];
		ans += max((ll)0, ((ll) (a[i] - 1)) * (comp[i + 1] - comp[i]));
		if(a[i] != 1){
			join(i, i + 1);
		}
		e.pb({comp[i + 1] - comp[i], i});
	}
	sort(all(e));
	for(int i = 0; i < sz(e); i++){
		if(join(e[i][1], e[i][1] + 1)){
			ans += e[i][0];
		}
	}
	return ans;
}

Compilation message

railroad.cpp: In function 'long long int plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:63:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |  for(int i = 0; i < sz(comp) - 1; i++){
      |                 ~~^~~~~~~~~~~~~~
railroad.cpp:72:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |  for(int i = 0; i < sz(e); i++){
      |                   ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 212 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 212 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 1 ms 212 KB n = 8
27 Correct 1 ms 212 KB n = 8
28 Correct 1 ms 212 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 1 ms 212 KB n = 16
31 Correct 1 ms 212 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 1 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 1 ms 212 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 296 KB n = 16
44 Correct 1 ms 212 KB n = 9
45 Correct 1 ms 300 KB n = 15
46 Correct 1 ms 252 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 1 ms 304 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 246 ms 13252 KB n = 199999
2 Correct 258 ms 13252 KB n = 199991
3 Correct 245 ms 13244 KB n = 199993
4 Correct 188 ms 14040 KB n = 152076
5 Correct 130 ms 8256 KB n = 93249
6 Correct 237 ms 15912 KB n = 199910
7 Correct 246 ms 16328 KB n = 199999
8 Correct 224 ms 15912 KB n = 199997
9 Correct 249 ms 15308 KB n = 171294
10 Correct 176 ms 12768 KB n = 140872
11 Correct 217 ms 16016 KB n = 199886
12 Correct 237 ms 16420 KB n = 199996
13 Correct 229 ms 16040 KB n = 200000
14 Correct 245 ms 16568 KB n = 199998
15 Correct 238 ms 16292 KB n = 200000
16 Correct 255 ms 16644 KB n = 199998
17 Correct 225 ms 19120 KB n = 200000
18 Correct 235 ms 16676 KB n = 190000
19 Correct 215 ms 17640 KB n = 177777
20 Correct 104 ms 8716 KB n = 100000
21 Correct 260 ms 17064 KB n = 200000
22 Correct 266 ms 17200 KB n = 200000
23 Correct 294 ms 17140 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB n = 2
2 Correct 1 ms 212 KB n = 2
3 Correct 1 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 1 ms 212 KB n = 2
6 Correct 1 ms 212 KB n = 2
7 Correct 1 ms 212 KB n = 3
8 Correct 0 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 1 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 1 ms 212 KB n = 8
14 Correct 1 ms 212 KB n = 8
15 Correct 1 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 1 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 1 ms 212 KB n = 3
20 Correct 1 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 1 ms 212 KB n = 8
23 Correct 1 ms 212 KB n = 8
24 Correct 1 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 1 ms 212 KB n = 8
27 Correct 1 ms 212 KB n = 8
28 Correct 1 ms 212 KB n = 8
29 Correct 1 ms 212 KB n = 16
30 Correct 1 ms 212 KB n = 16
31 Correct 1 ms 212 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 1 ms 212 KB n = 16
35 Correct 1 ms 212 KB n = 16
36 Correct 1 ms 212 KB n = 15
37 Correct 1 ms 212 KB n = 8
38 Correct 1 ms 212 KB n = 16
39 Correct 1 ms 212 KB n = 16
40 Correct 1 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 296 KB n = 16
44 Correct 1 ms 212 KB n = 9
45 Correct 1 ms 300 KB n = 15
46 Correct 1 ms 252 KB n = 16
47 Correct 1 ms 212 KB n = 16
48 Correct 1 ms 304 KB n = 16
49 Correct 246 ms 13252 KB n = 199999
50 Correct 258 ms 13252 KB n = 199991
51 Correct 245 ms 13244 KB n = 199993
52 Correct 188 ms 14040 KB n = 152076
53 Correct 130 ms 8256 KB n = 93249
54 Correct 237 ms 15912 KB n = 199910
55 Correct 246 ms 16328 KB n = 199999
56 Correct 224 ms 15912 KB n = 199997
57 Correct 249 ms 15308 KB n = 171294
58 Correct 176 ms 12768 KB n = 140872
59 Correct 217 ms 16016 KB n = 199886
60 Correct 237 ms 16420 KB n = 199996
61 Correct 229 ms 16040 KB n = 200000
62 Correct 245 ms 16568 KB n = 199998
63 Correct 238 ms 16292 KB n = 200000
64 Correct 255 ms 16644 KB n = 199998
65 Correct 225 ms 19120 KB n = 200000
66 Correct 235 ms 16676 KB n = 190000
67 Correct 215 ms 17640 KB n = 177777
68 Correct 104 ms 8716 KB n = 100000
69 Correct 260 ms 17064 KB n = 200000
70 Correct 266 ms 17200 KB n = 200000
71 Correct 294 ms 17140 KB n = 200000
72 Correct 263 ms 17056 KB n = 200000
73 Correct 276 ms 17128 KB n = 200000
74 Correct 273 ms 17120 KB n = 200000
75 Correct 232 ms 17080 KB n = 200000
76 Correct 232 ms 17064 KB n = 200000
77 Correct 236 ms 20276 KB n = 200000
78 Correct 215 ms 17124 KB n = 200000
79 Correct 240 ms 15980 KB n = 184307
80 Correct 87 ms 6928 KB n = 76040
81 Correct 274 ms 16016 KB n = 199981
82 Correct 287 ms 16480 KB n = 199994
83 Correct 291 ms 16032 KB n = 199996
84 Correct 267 ms 16568 KB n = 199998
85 Correct 250 ms 16220 KB n = 200000
86 Correct 279 ms 16648 KB n = 199998
87 Correct 273 ms 19116 KB n = 200000
88 Correct 284 ms 17500 KB n = 200000
89 Correct 320 ms 19172 KB n = 200000
90 Correct 234 ms 17120 KB n = 200000
91 Correct 246 ms 17128 KB n = 200000
92 Correct 236 ms 17124 KB n = 200000