Cod sursa(job #895593)

Utilizator BiancadarBianca Darolti Biancadar Data 27 februarie 2013 11:55:07
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <cstdio>

using namespace std;

int s[16001],k,n;

int ok(int x)
{
    int y=0,i=1,r=0;
    while(y<=x && i<=n && r<k)
    {
        if(y+s[i]<=x) y+=s[i];
        else
        {
            y=0;
            r++;
            i--;
        }
        i++;
    }
    if(i>n)
    return 1;
    return 0;
}

int main()
{
    int li=0,lf=0,m,i,z;
    FILE *fin=fopen("transport.in","r"),
        *fout=fopen("transport.out","w");
    fscanf(fin,"%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&s[i]);
        if(li<s[i]) li=s[i];
        lf+=s[i];
    }
    while(li<=lf)
    {
        m=(li+lf)/2;
        if(ok(m))
        {
            z=m;
            lf=m-1;
        }
        else li=m+1;
    }
    fprintf(fout,"%d",z);

    return 0;
}