Cod sursa(job #1100108)

Utilizator cygnusCygnus Computers cygnus Data 6 februarie 2014 16:50:51
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
int k,v[16001],n;
int ok(int t)
{
    int i,s=0,count=0;
    for(i=1;i<=n;i++)
    {
        if(v[i]>t) return 0;

        if (s+v[i]<=t)
            s=s+v[i];
        else
            {
            count++;
            s=v[i];
            }
    }
    if(s>0)
       count++;
    if (count<=k)
        return 1;
    else
        return 0;
}
int bs(int st,int dr)
{
    int med,last=-1;
    while(st<=dr)
      {
      med=st+((dr-st)>>1);
      if (ok(med))
          {
          last=med;
          dr=med-1;
          }
      else
          st=med+1;
      }
    return last;
}
int main()
{
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    int i,s=0,x=0;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
        {
        scanf("%d",&v[i]);
        s=s+v[i];
        }
    printf("%d\n",bs(1,s));
return 0;
}