Cod sursa(job #703359)

Utilizator t.valentinoRemus Tumac t.valentino Data 2 martie 2012 12:00:00
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<cstdio>
using namespace std;
 
long long int n,k,v[16000],dmax,dmin,x,verif,j,d,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 cautarebin(int st, int dr)
{
	while (st<=dr){
		d=(st+dr)/2;
		if (verifk(d)&&verifk(d-1)==0) return d;
		else if (verifk(d)) dr=d-1;
		else st=d+1;
	}
	return -1;
} 
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 (dmax<v[j])
			dmin=v[j];
		dmax+=v[j];
	}
	
	printf("%lld",cautarebin(dmin,dmax));
	return 0;
}