Submission #165605

#TimeUsernameProblemLanguageResultExecution timeMemory
165605Peacher29Rice Hub (IOI11_ricehub)C++14
42 / 100
29 ms2936 KiB
#include "ricehub.h"
#include<bits/stdc++.h>

using namespace std;

class pont{
public:
	int index;
	int ut, el;
};

vector<pont> p;

const bool operator<(const pont& p1, const pont& p2){
	return p1.index < p2.index;
}

long long L;

long long mennyi(long long e, long long i, long long u){
	//cout << p[e].ut-p[i].ut << ' ' << (i-e)*(L-p[i].index) << ' ' <<
	//	p[u].el-p[i].el << ' ' << (u-i)*p[i].index << '\n';
	return p[e].ut-p[i].ut-(i-e)*(L-p[i].index)
		  +p[u].el-p[i].el-(u-i)*p[i].index;
}

int besthub(int n, int l, int x[], long long b)
{
	L=l;
	int er=0;
	p.resize(n);
	for(int i=0;i<n;i++){
		p[i].index=x[i];
	}
	sort(p.begin(),p.end());
	p[0].el=p[0].index;
	for(int i=1;i<n;i++){
		p[i].el=p[i-1].el+p[i].index;
	}
	p[n-1].ut=l-p[n-1].index;
	for(int i=n-2;i>=0;i--){
		p[i].ut=p[i+1].ut+l-p[i].index;
	}
	for(int i=0;i<n;i++){
		int aa=i, bb = n-1, k;
		while(aa!=bb){
			k=(aa+bb) /2+1;
			if(mennyi(i, (i+k)/2,k)<=b){
				aa=k;
			} else {
				bb=k-1;
			}
		}
		//cout << i << ":" << aa << '\n';
		er=max(er,aa-i+1);
	}
	//cout << p[2].ut << ' ' << p[3].ut << ' ' << p[4].ut << '\n' <<
	//		p[2].el << ' ' << p[3].el << ' ' << p[4].el << '\n' 
	//		<< mennyi(2,3,4) << '\n';
return er;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...