Cod sursa(job #496044)

Utilizator LAM_LAMTRAN BACH LAM LAM_LAM Data 27 octombrie 2010 17:19:41
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
long i,n,k;
long f[16001];
long transport(long c)
{
		long i,s=0,t=0;
		for(i=1;i<=n;++i)
			if(f[i]>c)
				return k+1;
			else
				if(s+f[i]>c)
					{
					s=f[i];
					++t;
					}
				else
					s+=f[i];
		if(s>0)
			++t;	
		return t;		
}



long binar_search()
{
		long st,dr,med,t,last;
		st=1;
		dr=(1ul<<31)-1;
		while(st<dr)
			{
				med=st+((dr-st)>>1);
				t=transport(med);
				if(t<=k)
						{
							last=med;
							dr=med-1;
						}
				else
					st=med+1;
			}
		return last;
}




int main()
{
		freopen("transport.in","r",stdin);
		freopen("transport.out","w",stdout);
		scanf("%ld%ld",&n,&k);
		for(i=1;i<=n;++i)
			scanf("%ld",&f[i]);
		printf("%ld\n",binar_search());
		return 0;
}