Cod sursa(job #96833)

Utilizator savimSerban Andrei Stan savim Data 3 noiembrie 2007 21:35:38
Problema Transport Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
int main()
{
    long nr,t,r,p,q,i,j,k,n;
	long a[16000];
    
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
    
    scanf("%ld%ld",&n,&k);
    p=0;q=0;
    for (i=1; i<=n; i++)
    {
            scanf("%ld",&a[i]);
            q=q+a[i];
            if (a[i]>p) p=a[i];
    }
    while (p<q)
    {
           r=(p+q)/2;
           t=0;nr=0;
           i=0;
           while (i<n)     
           {
				 i++;
				 if (t+a[i]<r)
                    t=t+a[i];
                 else
                 {
                     nr++;
                     t=0;    
					 i--;
				 }
		   }
		  nr++;
		  if (nr==k) break;
		  else if (nr>k) p=r;
			   else q=r;
	}
	q=1;
	while (q && p>0)
	{
		  p=r-1;
		  if (p<0) break;
		  i=0;t=0;nr=0;
		  while (i<n)
		  {
				i++;
				if (t+a[i]<=p)
				   t=t+a[i];
				else
				{
					nr++;
					t=0;
					i--;
				}
		  }
		  nr++;
		  if (nr==k) r=r--;
		  else q=0;
	}
	printf("%ld",r);
	return 0;
}