Cod sursa(job #98314)

Utilizator raduzerRadu Zernoveanu raduzer Data 10 noiembrie 2007 12:28:31
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>

int a[16010],n,k,max,s,l,r,z,t;

int check(int m)
{
    int i;
    s=0;
    t=0;
    for (i=1; i<=n; ++i)
    {
        s+=a[i];
        if (s>m)
        {
                ++t;
                s=a[i];
        }
    }
    if (s>0) t=t+1;
    if (t<=k) return 1;
    else return 0;
}

int main()
{
    freopen("transport.in","rt",stdin);
    freopen("transport.out","wt",stdout);
    scanf("%d %d",&n,&k);
    int i;
    max=0;
    for (i=1; i<=n; ++i) 
    {
        scanf("%d ",&a[i]);
        if (max<a[i]) max=a[i];
        s+=a[i];
    }
    z=-1;
    l=max;
    r=s;
    while (l<=r)
    {
          if (check((l+r)/2)==1)
          {
                      z=(l+r)/2;
                      r=(l+r)/2-1;
          }
          else 
          {
               l=(l+r)/2+1;
          }
    }
    printf("%d\n",z);
    return 0;
}