Cod sursa(job #703502)

Utilizator t.valentinoRemus Tumac t.valentino Data 2 martie 2012 12:40:33
Problema Transport Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
using namespace std;
 
long long int n,k,v[16000],dmax,dmin,x,verif,j,d,verifb,rasp,ok;
 
bool verifk (int a)
{   int ans = 1;
	int i , s = 0;

	for (i=1;i<=n;i++){
		if (s + v[i] > a){
			s=v[i];
			ans++;
			if (ans>k) 
				return false;
		}
		else s+=v[i];
	}
	return (ans <= k);
}
 
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%lld %lld",&n,&k);
	
	for (j=1;j<=n;j++){
		scanf("%lld",&v[j]);
		if (ok==0){
			dmin=v[j];
			ok=1;
		}
		if (dmin>v[j])
			dmin=v[j];
		dmax=dmax+v[j];
	}
	dmin=0;
	dmax=2000000000;
	rasp=-1;
	while (dmin<=dmax){
		d=(dmin+dmax)/2;
		verif=verifk(d);
		verifb=verifk(d-1);
		if (verif==1&&verifb==0){
			rasp=d; 
			break;
		}
		else{
			if (verif==1)
				dmax=d-1;
			else
				dmin=d+1;
		}
	}
	
	
	printf("%lld",rasp);
	return 0;
}