Submission #139033

# Submission time Handle Problem Language Result Execution time Memory
139033 2019-07-31T08:16:36 Z SirCeness Shortcut (IOI16_shortcut) C++14
0 / 100
2 ms 396 KB
#include "shortcut.h"
#include <bits/stdc++.h>

#define pb push_back
#define mp make_pair
#define inside sl<=l&&r<=sr
#define outside r<sl||sr<l
#define orta ((l+r)>>1)
#define INF 1000000009
#define mod 1000000007
#define ppair(x); cerr << "(" << x.first << ", " << x.second << ")\n";
#define bas(x) #x << ": " << x << " "
#define prarr(x, n); cerr << #x << ": "; for(int qsd = 0; qsd < n; qsd++) cerr << x[qsd] << " "; cerr << "\n";
#define prarrv(x); cerr << #x << ": "; for(int qsd = 0; qsd < (int)x.size(); qsd++) cerr << x[qsd] << " "; cerr << "\n";
using namespace std;
typedef long long ll;

vector<ll> lmax;
vector<ll> rmax;
int c;
int n;
vector<int> l, d;
vector<ll> pre;

ll dist(int ll, int rr){
	return abs(pre[rr] - pre[ll]);
}

ll getl(int i){
	return max(lmax[i], (ll)d[i]);
}

ll getr(int i){
	return max(rmax[i], (ll)d[i]);
}

int check(ll val){
	int pl = 0;
	int pr = n-1;
	int islem = 1;
	while (islem){
		islem = 0;
		for (int i = 0; i < n; i++){
			ll rig = d[i] + dist(i, pl) + c + getr(pr);
			rig = min(rig, d[i] + rmax[i]);
			
			while (pl < pr && rig > val){
				pl++;
				rig = d[i] + dist(i, pl) + c + getr(pr);
				rig = min(rig, d[i] + rmax[i]);
				islem = 1;
			}
			
			ll lef = d[i] + dist(i, pr) + c + getl(pl);
			lef = min(lef, d[i] + lmax[i]);
			while (pl < pr && lef > val){
				pr--;
				lef = d[i] + dist(i, pr) + c + getl(pl);
				lef = min(lef, d[i] + lmax[i]);
				islem = 1;
			}
			if (pl == pr) return 0;
		}
	}
	return 1;
}

ll find_shortcut(int N, vector<int> L, vector<int> D, int C){
	l = L;
	d = D;
	n = N;
	c = C;
	lmax.pb(0);
	for (int i = 1; i < n; i++){
		lmax.pb(max(lmax[i-1] + l[i-1], (ll)l[i-1] + d[i-1]));
	}
	rmax.resize(n);
	rmax[n-1] = 0;
	for (int i = n-2; i >= 0; i--){
		rmax[i] = max(rmax[i+1] + l[i], (ll)l[i] + d[i+1]);
	}
	pre.pb(0);
	for (int i = 1; i < n; i++){
		pre.pb(pre[i-1] + l[i-1]);
	}
	
	ll bas = 0;
	ll son = 1e15+1;
	while (bas < son){
		int m = (bas+son)>>1;
		if (check(m)) son = m;
		else bas = m+1;
	}
	return bas;
}





# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB n = 4, 80 is a correct answer
2 Correct 2 ms 256 KB n = 9, 110 is a correct answer
3 Incorrect 2 ms 396 KB n = 4, incorrect answer: jury 21 vs contestant 14
4 Halted 0 ms 0 KB -