Submission #1225025

#TimeUsernameProblemLanguageResultExecution timeMemory
1225025emptypringlescanSparklers (JOI17_sparklers)C++17
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
int32_t main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,k;
	long long t;
	cin >> n >> k >> t;
	long long arr[n];
	for(int i=0; i<n; i++) cin >> arr[i];
	k--;
	long long lo=0,hi=1e9+5,mid;
	while(lo<hi){
		mid=(lo+hi)/2;
		vector<long long> lft,rgt;
		for(int i=0; i<k; i++) lft.push_back(2ll*(arr[i+1]-arr[i]));
		for(int i=n-1; i>k; i--) rgt.push_back(2ll*(arr[i]-arr[i-1]));
		long long buff=t*mid;
		while(!lft.empty()||!rgt.empty()){
			if(rgt.empty()&&lft.back()<=2ll*buff){
				buff-=lft.back()/2ll;
				buff+=t*mid;
				buff=min(buff,(long long)1e15);
				lft.pop_back();
			}
			else if(lft.empty()&&rgt.back()<=2ll*buff){
				buff-=rgt.back()/2ll;
				buff+=t*mid;
				buff=min(buff,(long long)1e15);
				rgt.pop_back();
			}
			else if(lft.empty()||rgt.empty()) break;
			else if(rgt.back()<lft.back()&&rgt.back()<=2ll*buff){
				buff-=rgt.back()/2ll;
				buff+=t*mid;
				buff=min(buff,(long long)1e15);
				rgt.pop_back();
			}
			else if(lft.back()<=rgt.back()&&lft.back()<=2ll*buff){
				buff-=lft.back()/2ll;
				buff+=t*mid;
				buff=min(buff,(long long)1e15);
				lft.pop_back();
			}
			else break;
		}
		if(lft.empty()&&rgt.empty()) hi=mid;
		else lo=mid+1;
	}
	cout << (lo+1ll)/2ll;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...