Submission #43226

# Submission time Handle Problem Language Result Execution time Memory
43226 2018-03-11T04:46:32 Z szawinis Wiring (IOI17_wiring) C++14
100 / 100
155 ms 76372 KB
#include "wiring.h"
#include <bits/stdc++.h>
#define pos first
#define col second
using namespace std;
using ll = long long;
const int N = 2e5+1;
const ll INF = 1e17;

int n;
vector<pair<int,int> > a;
ll s[N], dp[N];
inline ll fl(int j, int k) { // j, k part of sum when i-k < k-j
	return dp[j] + s[j] - 2*s[k] - 1ll * (j-2*k) * a[k+1].pos;
}
inline ll fg(int j, int k) {
	return dp[j] + s[j] - 2*s[k] - 1ll * (j-2*k) * a[k].pos;
}
set<pair<ll,int> > stl, stg; // l: j <= 2*k-i, g: j > 2*k-i
ll min_total_length(std::vector<int> r, std::vector<int> b) {
	n = r.size() + b.size();
	for(int i = 0; i < r.size(); i++) a.emplace_back(r[i], 0);
	for(int i = 0; i < b.size(); i++) a.emplace_back(b[i], 1);
	a.emplace_back(INT_MIN, INT_MIN);
	sort(a.begin(), a.end());
	for(int i = 1; i <= n; i++) s[i] = s[i-1] + a[i].pos;
	fill(dp+1, dp+n+1, INF);
	for(int i = 2, k = 0; i <= n; i++) {
		if(a[i].col != a[i-1].col) {
			k = i-1;
			stl.clear();
			stg.clear();
			for(int j = k-1; j >= 0 && a[j+1].col == a[k].col; j--)
				stl.emplace(fl(j, k), j);
		}
		if(!k) continue;
		// case segments completely disjoint
		if(!stl.empty()) dp[i] = min(stl.begin()->first + s[i] - 1ll * i * a[k+1].pos, dp[i]);
		if(!stg.empty()) dp[i] = min(stg.begin()->first + s[i] - 1ll * i * a[k].pos, dp[i]);
		if(!stl.empty()) {
			stl.erase(make_pair(fl(2*k-i, k), 2*k-i));
			stg.emplace(make_pair(fg(2*k-i, k), 2*k-i));
		}
		// special case: segments intersect at one node
		if(k-1 >= 1 && a[k-1].col == a[i].col)
			dp[i] = min(dp[k] + s[i] - s[k] - 1ll * (i-k) * a[k].pos, dp[i]);
	}
	return dp[n];
}

Compilation message

wiring.cpp: In function 'll min_total_length(std::vector<int>, std::vector<int>)':
wiring.cpp:22:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < r.size(); i++) a.emplace_back(r[i], 0);
                   ^
wiring.cpp:23:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < b.size(); i++) a.emplace_back(b[i], 1);
                   ^
# Verdict Execution time Memory Grader output
1 Correct 2 ms 248 KB Output is correct
2 Correct 1 ms 352 KB Output is correct
3 Correct 2 ms 424 KB Output is correct
4 Correct 2 ms 440 KB Output is correct
5 Correct 2 ms 568 KB Output is correct
6 Correct 2 ms 568 KB Output is correct
7 Correct 2 ms 568 KB Output is correct
8 Correct 2 ms 568 KB Output is correct
9 Correct 2 ms 568 KB Output is correct
10 Correct 2 ms 568 KB Output is correct
11 Correct 2 ms 568 KB Output is correct
12 Correct 2 ms 568 KB Output is correct
13 Correct 2 ms 568 KB Output is correct
14 Correct 2 ms 604 KB Output is correct
15 Correct 2 ms 604 KB Output is correct
16 Correct 2 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 604 KB Output is correct
2 Correct 2 ms 604 KB Output is correct
3 Correct 103 ms 11468 KB Output is correct
4 Correct 107 ms 11732 KB Output is correct
5 Correct 82 ms 11732 KB Output is correct
6 Correct 138 ms 13316 KB Output is correct
7 Correct 149 ms 13316 KB Output is correct
8 Correct 140 ms 13316 KB Output is correct
9 Correct 141 ms 13316 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 13316 KB Output is correct
2 Correct 1 ms 13316 KB Output is correct
3 Correct 90 ms 13316 KB Output is correct
4 Correct 94 ms 13316 KB Output is correct
5 Correct 2 ms 13316 KB Output is correct
6 Correct 1 ms 13316 KB Output is correct
7 Correct 2 ms 13316 KB Output is correct
8 Correct 2 ms 13316 KB Output is correct
9 Correct 2 ms 13316 KB Output is correct
10 Correct 2 ms 13316 KB Output is correct
11 Correct 2 ms 13316 KB Output is correct
12 Correct 2 ms 13316 KB Output is correct
13 Correct 2 ms 13316 KB Output is correct
14 Correct 2 ms 13316 KB Output is correct
15 Correct 2 ms 13316 KB Output is correct
16 Correct 2 ms 13316 KB Output is correct
17 Correct 1 ms 13316 KB Output is correct
18 Correct 87 ms 13316 KB Output is correct
19 Correct 88 ms 13316 KB Output is correct
20 Correct 96 ms 13316 KB Output is correct
21 Correct 87 ms 13316 KB Output is correct
22 Correct 117 ms 13316 KB Output is correct
23 Correct 91 ms 13316 KB Output is correct
24 Correct 115 ms 13316 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 13316 KB Output is correct
2 Correct 109 ms 13316 KB Output is correct
3 Correct 89 ms 13316 KB Output is correct
4 Correct 100 ms 13316 KB Output is correct
5 Correct 81 ms 13316 KB Output is correct
6 Correct 1 ms 13316 KB Output is correct
7 Correct 2 ms 13316 KB Output is correct
8 Correct 1 ms 13316 KB Output is correct
9 Correct 1 ms 13316 KB Output is correct
10 Correct 1 ms 13316 KB Output is correct
11 Correct 1 ms 13316 KB Output is correct
12 Correct 1 ms 13316 KB Output is correct
13 Correct 1 ms 13316 KB Output is correct
14 Correct 1 ms 13316 KB Output is correct
15 Correct 1 ms 13316 KB Output is correct
16 Correct 1 ms 13316 KB Output is correct
17 Correct 2 ms 13316 KB Output is correct
18 Correct 143 ms 14636 KB Output is correct
19 Correct 112 ms 14636 KB Output is correct
20 Correct 96 ms 14740 KB Output is correct
21 Correct 123 ms 17280 KB Output is correct
22 Correct 144 ms 22268 KB Output is correct
23 Correct 124 ms 24040 KB Output is correct
24 Correct 135 ms 24276 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 248 KB Output is correct
2 Correct 1 ms 352 KB Output is correct
3 Correct 2 ms 424 KB Output is correct
4 Correct 2 ms 440 KB Output is correct
5 Correct 2 ms 568 KB Output is correct
6 Correct 2 ms 568 KB Output is correct
7 Correct 2 ms 568 KB Output is correct
8 Correct 2 ms 568 KB Output is correct
9 Correct 2 ms 568 KB Output is correct
10 Correct 2 ms 568 KB Output is correct
11 Correct 2 ms 568 KB Output is correct
12 Correct 2 ms 568 KB Output is correct
13 Correct 2 ms 568 KB Output is correct
14 Correct 2 ms 604 KB Output is correct
15 Correct 2 ms 604 KB Output is correct
16 Correct 2 ms 604 KB Output is correct
17 Correct 2 ms 604 KB Output is correct
18 Correct 2 ms 604 KB Output is correct
19 Correct 103 ms 11468 KB Output is correct
20 Correct 107 ms 11732 KB Output is correct
21 Correct 82 ms 11732 KB Output is correct
22 Correct 138 ms 13316 KB Output is correct
23 Correct 149 ms 13316 KB Output is correct
24 Correct 140 ms 13316 KB Output is correct
25 Correct 141 ms 13316 KB Output is correct
26 Correct 1 ms 13316 KB Output is correct
27 Correct 1 ms 13316 KB Output is correct
28 Correct 90 ms 13316 KB Output is correct
29 Correct 94 ms 13316 KB Output is correct
30 Correct 2 ms 13316 KB Output is correct
31 Correct 1 ms 13316 KB Output is correct
32 Correct 2 ms 13316 KB Output is correct
33 Correct 2 ms 13316 KB Output is correct
34 Correct 2 ms 13316 KB Output is correct
35 Correct 2 ms 13316 KB Output is correct
36 Correct 2 ms 13316 KB Output is correct
37 Correct 2 ms 13316 KB Output is correct
38 Correct 2 ms 13316 KB Output is correct
39 Correct 2 ms 13316 KB Output is correct
40 Correct 2 ms 13316 KB Output is correct
41 Correct 2 ms 13316 KB Output is correct
42 Correct 1 ms 13316 KB Output is correct
43 Correct 87 ms 13316 KB Output is correct
44 Correct 88 ms 13316 KB Output is correct
45 Correct 96 ms 13316 KB Output is correct
46 Correct 87 ms 13316 KB Output is correct
47 Correct 117 ms 13316 KB Output is correct
48 Correct 91 ms 13316 KB Output is correct
49 Correct 115 ms 13316 KB Output is correct
50 Correct 1 ms 13316 KB Output is correct
51 Correct 109 ms 13316 KB Output is correct
52 Correct 89 ms 13316 KB Output is correct
53 Correct 100 ms 13316 KB Output is correct
54 Correct 81 ms 13316 KB Output is correct
55 Correct 1 ms 13316 KB Output is correct
56 Correct 2 ms 13316 KB Output is correct
57 Correct 1 ms 13316 KB Output is correct
58 Correct 1 ms 13316 KB Output is correct
59 Correct 1 ms 13316 KB Output is correct
60 Correct 1 ms 13316 KB Output is correct
61 Correct 1 ms 13316 KB Output is correct
62 Correct 1 ms 13316 KB Output is correct
63 Correct 1 ms 13316 KB Output is correct
64 Correct 1 ms 13316 KB Output is correct
65 Correct 1 ms 13316 KB Output is correct
66 Correct 2 ms 13316 KB Output is correct
67 Correct 143 ms 14636 KB Output is correct
68 Correct 112 ms 14636 KB Output is correct
69 Correct 96 ms 14740 KB Output is correct
70 Correct 123 ms 17280 KB Output is correct
71 Correct 144 ms 22268 KB Output is correct
72 Correct 124 ms 24040 KB Output is correct
73 Correct 135 ms 24276 KB Output is correct
74 Correct 150 ms 27076 KB Output is correct
75 Correct 110 ms 27076 KB Output is correct
76 Correct 126 ms 29560 KB Output is correct
77 Correct 145 ms 30484 KB Output is correct
78 Correct 121 ms 32448 KB Output is correct
79 Correct 101 ms 33240 KB Output is correct
80 Correct 136 ms 35100 KB Output is correct
81 Correct 115 ms 37728 KB Output is correct
82 Correct 124 ms 39420 KB Output is correct
83 Correct 120 ms 40176 KB Output is correct
84 Correct 128 ms 43060 KB Output is correct
85 Correct 106 ms 43060 KB Output is correct
86 Correct 155 ms 45272 KB Output is correct
87 Correct 134 ms 47312 KB Output is correct
88 Correct 132 ms 48440 KB Output is correct
89 Correct 141 ms 50636 KB Output is correct
90 Correct 141 ms 52352 KB Output is correct
91 Correct 129 ms 55976 KB Output is correct
92 Correct 120 ms 56776 KB Output is correct
93 Correct 143 ms 58820 KB Output is correct
94 Correct 119 ms 61264 KB Output is correct
95 Correct 135 ms 61788 KB Output is correct
96 Correct 144 ms 65388 KB Output is correct
97 Correct 145 ms 68216 KB Output is correct
98 Correct 145 ms 69640 KB Output is correct
99 Correct 141 ms 71600 KB Output is correct
100 Correct 120 ms 72316 KB Output is correct
101 Correct 150 ms 75208 KB Output is correct
102 Correct 126 ms 76372 KB Output is correct