Cod sursa(job #496035)

Utilizator alecsandrualex cuturela alecsandru Data 27 octombrie 2010 17:02:08
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.77 kb
	#include<stdio.h>
	int max,s,x[16050],k,n,i;
	int raton(int val)
	{	int cs,c=0;
	    if(val<max)
			return k+1;
		else
	    {
			cs=x[1];
			for(i=2;i<=n;i++)
				if(cs+x[i]>val)
				{
					c++;
					cs=x[i];
				}
				else
					cs=cs+x[i];
				
			if(cs>0)
				c++;
			return c;
		}
	}	
	int bs()
	{
		int st,dr,med,t,last;
		st=1; dr=s;
		while(st<=dr)
		{
			med=st+((dr-st)>>1);
			t=raton(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("%d%d",&n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&x[i]);
		if(x[i]>max)
		max=x[i];
		s=s+x[i];
	}
	printf("%d",bs());
	return 0;
}