Cod sursa(job #496033)

Utilizator josephsmateiJosephs Matei josephsmatei Data 27 octombrie 2010 17:01:38
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include <cstdio>

int n,k,x[16006];
int transport(int c)
{
	int i,s=0,t=0;
	for(i=1;i<=n;i++)
	{
		if(x[i]>c)return k+1;
		else {if(s+x[i]>c){s=x[i];t++;}else s+=x[i];}
	}
if(s>0)
	t++;
return t;
}

int bs()
{
	int med,t,st,dr;
	int last=-1;
	st=1;dr=(1ul<<31)-1;
	while(st<=dr)
	{
		med=st+((dr-st)>>1);
		t=transport(med);
		if(t>k)
			{st=med+1;}
		else
			{dr=med-1;last=med;}
	}
return last;
}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	int i;
	scanf("%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x[i]);
	}
	printf("%d\n",bs());
	return 0;
}