Submission #367061

# Submission time Handle Problem Language Result Execution time Memory
367061 2021-02-16T06:43:58 Z dennisstar Shortcut (IOI16_shortcut) C++17
0 / 100
1 ms 364 KB
#include "shortcut.h"
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const ll INF = 2e15;

int n, c;
vector<int> L, R;
vector<ll> P, D;

bool f(ll m) {
	ll l=-INF, r=INF, d=-INF, u=INF, m1=INF, m2=INF;
	for (int t=0, k=0; t<n; t++) {
		int i=L[t];
		while (k<n) {
			int j=R[k];
			if (P[j]-P[i]+D[i]+D[j]<=m) break;
			ll im=P[j]-D[j];
			if (m1>im) m2=m1, m1=im;
			else if (m2>im) m2=im;
			k++;
		}
		int j=(i==R[0]?R[1]:R[0]);
		if (P[j]-P[i]+D[i]+D[j]<=m) continue;
		ll w=m-c-D[i]-D[j];
		ll x=P[i], y=P[j];
		l=max(l, x+y-w);
		d=max(d, -x+y-w);
		w=m-c-D[i]+(m1==P[i]-D[i]?m2:m1);
		r=min(r, x+w);
		u=min(u, -x+w);
		if (l>r||d>u) return false;
	}
	for (int i=1, j=1; i<=n; i++) {
		ll s=max(l-P[i], d+P[i]);
		ll e=min(r-P[i], u+P[i]);
		if (s>e) continue;
		while (j<n&&P[j]<s) j++;
		if (s<=P[j]&&P[j]<=e) return true;
	}
	return false;
}

ll find_shortcut(int n, vector<int> l, vector<int> d, int c) {
	::n=n;
	::c=c;
	P={-INF, 0};
	for (auto &i:l) P.emplace_back(P.back()+i);
	P.emplace_back(INF);
	D={0};
	for (auto &i:d) D.emplace_back(i);

	for (int i=1; i<=n; i++)
		L.emplace_back(i),
		R.emplace_back(i);
	sort(L.begin(), L.end(), [&](int x, int y) { return P[x]-D[x]>P[y]-D[y]; });
	sort(R.begin(), R.end(), [&](int x, int y) { return P[x]+D[x]>P[y]+D[y]; });
	
	sort(d.rbegin(), d.rend());
	ll s=d[0]+d[1], e=INF;
	while (s<e) {
		ll m=(s+e)/2;
		if (f(m)) e=m;
		else s=m+1;
	}

	return s;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB n = 4, 80 is a correct answer
2 Correct 1 ms 364 KB n = 9, 110 is a correct answer
3 Correct 1 ms 364 KB n = 4, 21 is a correct answer
4 Correct 1 ms 364 KB n = 3, 4 is a correct answer
5 Correct 1 ms 364 KB n = 2, 62 is a correct answer
6 Correct 1 ms 364 KB n = 2, 3 is a correct answer
7 Correct 1 ms 364 KB n = 3, 29 is a correct answer
8 Correct 1 ms 364 KB n = 2, 3 is a correct answer
9 Correct 1 ms 364 KB n = 2, 3 is a correct answer
10 Correct 1 ms 364 KB n = 2, 2000000001 is a correct answer
11 Correct 1 ms 364 KB n = 2, 3000000000 is a correct answer
12 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
13 Correct 1 ms 364 KB n = 3, 3000000000 is a correct answer
14 Correct 1 ms 364 KB n = 4, 3000000001 is a correct answer
15 Correct 1 ms 364 KB n = 4, 4000000000 is a correct answer
16 Correct 1 ms 364 KB n = 5, 4000000000 is a correct answer
17 Correct 1 ms 364 KB n = 10, 1000000343 is a correct answer
18 Correct 1 ms 364 KB n = 10, 3189 is a correct answer
19 Correct 1 ms 364 KB n = 10, 7000000000 is a correct answer
20 Correct 1 ms 364 KB n = 5, 12 is a correct answer
21 Correct 1 ms 364 KB n = 5, 25 is a correct answer
22 Correct 1 ms 364 KB n = 2, 122 is a correct answer
23 Correct 1 ms 364 KB n = 10, 117 is a correct answer
24 Incorrect 1 ms 364 KB n = 10, incorrect answer: jury 336 vs contestant 367
25 Halted 0 ms 0 KB -