Cod sursa(job #895658)

Utilizator Criss.Raita Cristina Criss. Data 27 februarie 2013 12:07:36
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <iostream>

using namespace std;

int n,k,v[16005];

int duba(int vol)
{
    int s, pas=0,i=1;
  /*  for(int i=1, pas=0;i<=n;i++)
    {
        s=0;
        while(j<=n && s+v[j]<=vol) s+=v[j], j++;
        pas++;
    }
*/
    while(i<=n)
    {
        s=0;
        while(i<=n && s+v[i]<=vol) s+=v[i++];
        pas++;
    }

    return pas;
}

int cb(int ls, int ld)
{
    /*if(ls>ld) return ld;
    int m=(ls+ld)/2;
    if(duba(m)>k) return cb(m+1,ld);
    else return cb(ls, m-1);
    */
    int m;
    while(ls < ld)
    {
        m=(ls+ld)/2;
        if(duba(m)>k) ls=m+1;
        else ld=m-1;
    }
    return ld;
}

int main()
{ int i;

    FILE *fin=fopen("transport.in","r"),
         *fout=fopen("transport.out","w");
    fscanf(fin, "%d %d", &n, &k);

    int ls=0, ld=0;
    for(i=1;i<=n;i++)
    { fscanf(fin,"%d",&v[i]);
      ld+=v[i];
      if(v[i]>ls)
        ls=v[i];
    }
    k=cb(ls, ld);

    fprintf(fout,"%d",k);
    return 0;
}