답안 #923284

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
923284 2024-02-07T05:01:06 Z findingFish Roller Coaster Railroad (IOI16_railroad) C++17
100 / 100
113 ms 24540 KB
#include <bits/stdc++.h>
#include "railroad.h"
using namespace std;

struct data1 {
  int x, y, z;
  data1 () {} 
  data1 (int _x, int _y, int _z) {//y for section No, z to diff whether x is s or t.
    x = _x, y = _y, z = _z;
  }
  bool operator < (const data1 &d) const {
    return x < d.x;
  }
};

const int INF = 2e9 + 10;

vector <int> p;

int find (int x) {
  return p[x] == x ? x : p[x] = find(p[x]);
}

bool merge (int x, int y) {
  x = find(x), y = find(y);
  return p[x] = y, x != y;
}

long long plan_roller_coaster (vector <int> s, vector <int> t) {
	s.push_back(INF);
	t.push_back(1);
	int n = (int) s.size();

	for (int i = 0; i < n; ++i) {
		p.push_back(i);
	}

	vector <data1> good;//size of good is 2n vetex, including s and t.
	for (int i = 0; i < n; ++i) {
		good.emplace_back(s[i], i, 1);
		good.emplace_back(t[i], i, -1);
	}
	sort(good.begin(), good.end());//non-descending of both s and t

	vector <data1> edge;//2n-1 in total
	for (int i = 0; i + 1 < n + n; ++i) {
		edge.emplace_back(good[i + 1].x - good[i].x, good[i].y, good[i + 1].y);
	}
	sort(edge.begin(), edge.end());



	long long ans = 0;

	for (int i = 0, diff = 0; i + 1 < n + n; ++i) {
		diff += good[i].z;
		ans += max(0, diff) * 1LL * (good[i + 1].x - good[i].x);//diff = -1 then 0
		
		if ((diff != 0) or (good[i].x == good[i + 1].x)) {
			merge(good[i].y, good[i + 1].y);
		}
	}

	for (int i = 0; i + 1 < n + n; ++i) {
		if (merge(edge[i].y, edge[i].z)) {
			ans += 1LL * edge[i].x;
		}
	}

	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 2
2 Correct 0 ms 348 KB n = 2
3 Correct 1 ms 348 KB n = 2
4 Correct 0 ms 348 KB n = 2
5 Correct 0 ms 344 KB n = 2
6 Correct 1 ms 500 KB n = 2
7 Correct 1 ms 344 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 0 ms 348 KB n = 3
10 Correct 0 ms 348 KB n = 8
11 Correct 0 ms 348 KB n = 8
12 Correct 0 ms 348 KB n = 8
13 Correct 0 ms 432 KB n = 8
14 Correct 0 ms 600 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 0 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 0 ms 348 KB n = 3
20 Correct 0 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 0 ms 348 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 0 ms 348 KB n = 8
25 Correct 0 ms 348 KB n = 8
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 2
2 Correct 0 ms 348 KB n = 2
3 Correct 1 ms 348 KB n = 2
4 Correct 0 ms 348 KB n = 2
5 Correct 0 ms 344 KB n = 2
6 Correct 1 ms 500 KB n = 2
7 Correct 1 ms 344 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 0 ms 348 KB n = 3
10 Correct 0 ms 348 KB n = 8
11 Correct 0 ms 348 KB n = 8
12 Correct 0 ms 348 KB n = 8
13 Correct 0 ms 432 KB n = 8
14 Correct 0 ms 600 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 0 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 0 ms 348 KB n = 3
20 Correct 0 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 0 ms 348 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 0 ms 348 KB n = 8
25 Correct 0 ms 348 KB n = 8
26 Correct 0 ms 348 KB n = 8
27 Correct 0 ms 348 KB n = 8
28 Correct 1 ms 344 KB n = 8
29 Correct 1 ms 348 KB n = 16
30 Correct 1 ms 344 KB n = 16
31 Correct 0 ms 344 KB n = 16
32 Correct 0 ms 348 KB n = 16
33 Correct 0 ms 348 KB n = 16
34 Correct 0 ms 348 KB n = 16
35 Correct 0 ms 348 KB n = 16
36 Correct 0 ms 348 KB n = 15
37 Correct 0 ms 348 KB n = 8
38 Correct 0 ms 348 KB n = 16
39 Correct 1 ms 348 KB n = 16
40 Correct 0 ms 348 KB n = 9
41 Correct 0 ms 348 KB n = 16
42 Correct 0 ms 348 KB n = 16
43 Correct 0 ms 348 KB n = 16
44 Correct 0 ms 344 KB n = 9
45 Correct 1 ms 432 KB n = 15
46 Correct 1 ms 348 KB n = 16
47 Correct 0 ms 344 KB n = 16
48 Correct 0 ms 344 KB n = 16
# 결과 실행 시간 메모리 Grader output
1 Correct 111 ms 24232 KB n = 199999
2 Correct 113 ms 22836 KB n = 199991
3 Correct 109 ms 22924 KB n = 199993
4 Correct 91 ms 21384 KB n = 152076
5 Correct 49 ms 10764 KB n = 93249
6 Correct 107 ms 22436 KB n = 199910
7 Correct 91 ms 21924 KB n = 199999
8 Correct 85 ms 22840 KB n = 199997
9 Correct 89 ms 22452 KB n = 171294
10 Correct 78 ms 20236 KB n = 140872
11 Correct 90 ms 22696 KB n = 199886
12 Correct 104 ms 22800 KB n = 199996
13 Correct 93 ms 22188 KB n = 200000
14 Correct 97 ms 23060 KB n = 199998
15 Correct 96 ms 22688 KB n = 200000
16 Correct 104 ms 22172 KB n = 199998
17 Correct 105 ms 23716 KB n = 200000
18 Correct 99 ms 23244 KB n = 190000
19 Correct 88 ms 22164 KB n = 177777
20 Correct 52 ms 11168 KB n = 100000
21 Correct 106 ms 23460 KB n = 200000
22 Correct 102 ms 24220 KB n = 200000
23 Correct 107 ms 23660 KB n = 200000
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB n = 2
2 Correct 0 ms 348 KB n = 2
3 Correct 1 ms 348 KB n = 2
4 Correct 0 ms 348 KB n = 2
5 Correct 0 ms 344 KB n = 2
6 Correct 1 ms 500 KB n = 2
7 Correct 1 ms 344 KB n = 3
8 Correct 0 ms 348 KB n = 3
9 Correct 0 ms 348 KB n = 3
10 Correct 0 ms 348 KB n = 8
11 Correct 0 ms 348 KB n = 8
12 Correct 0 ms 348 KB n = 8
13 Correct 0 ms 432 KB n = 8
14 Correct 0 ms 600 KB n = 8
15 Correct 1 ms 344 KB n = 8
16 Correct 1 ms 348 KB n = 8
17 Correct 0 ms 348 KB n = 8
18 Correct 1 ms 348 KB n = 8
19 Correct 0 ms 348 KB n = 3
20 Correct 0 ms 348 KB n = 7
21 Correct 1 ms 348 KB n = 8
22 Correct 0 ms 348 KB n = 8
23 Correct 1 ms 348 KB n = 8
24 Correct 0 ms 348 KB n = 8
25 Correct 0 ms 348 KB n = 8
26 Correct 0 ms 348 KB n = 8
27 Correct 0 ms 348 KB n = 8
28 Correct 1 ms 344 KB n = 8
29 Correct 1 ms 348 KB n = 16
30 Correct 1 ms 344 KB n = 16
31 Correct 0 ms 344 KB n = 16
32 Correct 0 ms 348 KB n = 16
33 Correct 0 ms 348 KB n = 16
34 Correct 0 ms 348 KB n = 16
35 Correct 0 ms 348 KB n = 16
36 Correct 0 ms 348 KB n = 15
37 Correct 0 ms 348 KB n = 8
38 Correct 0 ms 348 KB n = 16
39 Correct 1 ms 348 KB n = 16
40 Correct 0 ms 348 KB n = 9
41 Correct 0 ms 348 KB n = 16
42 Correct 0 ms 348 KB n = 16
43 Correct 0 ms 348 KB n = 16
44 Correct 0 ms 344 KB n = 9
45 Correct 1 ms 432 KB n = 15
46 Correct 1 ms 348 KB n = 16
47 Correct 0 ms 344 KB n = 16
48 Correct 0 ms 344 KB n = 16
49 Correct 111 ms 24232 KB n = 199999
50 Correct 113 ms 22836 KB n = 199991
51 Correct 109 ms 22924 KB n = 199993
52 Correct 91 ms 21384 KB n = 152076
53 Correct 49 ms 10764 KB n = 93249
54 Correct 107 ms 22436 KB n = 199910
55 Correct 91 ms 21924 KB n = 199999
56 Correct 85 ms 22840 KB n = 199997
57 Correct 89 ms 22452 KB n = 171294
58 Correct 78 ms 20236 KB n = 140872
59 Correct 90 ms 22696 KB n = 199886
60 Correct 104 ms 22800 KB n = 199996
61 Correct 93 ms 22188 KB n = 200000
62 Correct 97 ms 23060 KB n = 199998
63 Correct 96 ms 22688 KB n = 200000
64 Correct 104 ms 22172 KB n = 199998
65 Correct 105 ms 23716 KB n = 200000
66 Correct 99 ms 23244 KB n = 190000
67 Correct 88 ms 22164 KB n = 177777
68 Correct 52 ms 11168 KB n = 100000
69 Correct 106 ms 23460 KB n = 200000
70 Correct 102 ms 24220 KB n = 200000
71 Correct 107 ms 23660 KB n = 200000
72 Correct 108 ms 23008 KB n = 200000
73 Correct 112 ms 24048 KB n = 200000
74 Correct 108 ms 23848 KB n = 200000
75 Correct 105 ms 23688 KB n = 200000
76 Correct 94 ms 23456 KB n = 200000
77 Correct 99 ms 23456 KB n = 200000
78 Correct 94 ms 23596 KB n = 200000
79 Correct 95 ms 22436 KB n = 184307
80 Correct 41 ms 10744 KB n = 76040
81 Correct 85 ms 21416 KB n = 199981
82 Correct 92 ms 22688 KB n = 199994
83 Correct 91 ms 22968 KB n = 199996
84 Correct 96 ms 23192 KB n = 199998
85 Correct 94 ms 23048 KB n = 200000
86 Correct 100 ms 23520 KB n = 199998
87 Correct 100 ms 22944 KB n = 200000
88 Correct 107 ms 23420 KB n = 200000
89 Correct 107 ms 23292 KB n = 200000
90 Correct 102 ms 23956 KB n = 200000
91 Correct 99 ms 24540 KB n = 200000
92 Correct 93 ms 23716 KB n = 200000