Cod sursa(job #96831)

Utilizator savimSerban Andrei Stan savim Data 3 noiembrie 2007 21:25:57
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>
int main()
{
    long nr,t,r,p,q,i,j,k,n;
	long a[16000];
    
	freopen("transpor.in","r",stdin);
	freopen("transpor.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;
          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--;
          else q=0;
    }
	printf("%ld",r);
    return 0;   
}