Cod sursa(job #318856)

Utilizator ooctavTuchila Octavian ooctav Data 29 mai 2009 18:34:22
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>

int e[16001];
long long n,k,max=0,suma=0,st,dr,mij,rez=100000;

int ver(int mijloc)
{
	long long a=mijloc,nr=1;
	for(long long i=1;i<=n;i++)
		if(e[i]<=a)
			a=a-e[i];
		else
		{
			a=mijloc-e[i];
			nr++;
		}
	if(nr<=k)
		return 1;
	else
		return 0;
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%lld %lld",&n,&k);
	for(long long i=1;i<=n;i++)
	{
		scanf("%d",&e[i]);
		if(e[i]>max)
			max=e[i];
		suma=suma+e[i];
	}
	st=max;dr=suma;
	while(st<=dr)
	{
		mij=st+(dr-st)/2;
		if(ver(mij))
		{
			rez=mij;
			dr=mij-1;
		}
		else
			st=mij+1;
		
	}
	printf("%lld",rez);
	
	
	return 0;
}