Cod sursa(job #268318)

Utilizator vlad_olteanVladimir Oltean vlad_oltean Data 1 martie 2009 01:53:30
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>

int n,k,v[16001];

bool ok(int a)
{
	int nr=1,sum=0;
	
	for(int i=1;i<=n;i++)
	{	sum+=v[i];
		if(sum>a)
		{	nr++;
			sum%=a;
		}
		if(nr>k) return 0;
	}
	return (nr<=k);
}

int c(int l,int r)
{
	int m;
	while(r-l>1)
	{	m=l+(r-l+1)/2;
		if(ok(m)) r=m;
		else l=m+1;
	}
	return r;
}

int main()
{
	int sum=0,max,vol;
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	
	scanf("%d%d",&n,&k);
	scanf("%d",&v[1]);
	max=v[1]; sum=v[1];
	for(int i=2;i<=n;i++) 
	{	scanf("%d",&v[i]);
		sum+=v[i];
		if(max<v[i]) max=v[i];
	}
	vol=c(max,sum);
	
	printf("%d",vol);
	fclose(stdin); fclose(stdout);
	return 0;
}