Cod sursa(job #217323)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 27 octombrie 2008 23:30:56
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>

FILE *fin=fopen("transport.in","r"),
    *fout=fopen("transport.out","w");

int N,K,a[17000],li,lf;

int verif(int i){
    int nr=0,s=0;
    for(int j=1;j<=N;j++)
        if(s-a[j]>=0)
            s-=a[j];
        else{
            s=i-a[j];
            nr++;
        }

    if(nr<=K)
        return 1;
    return 0;
}

int main(){
    fscanf(fin,"%d %d",&N,&K);

    for(int i=1;i<=N;i++){
        fscanf(fin,"%d",&a[i]);
        lf+=a[i];
        if(li<a[i])
            li=a[i];
    }

    while(lf-li>1){

        int mij=(li+lf)/2;

        if(verif(mij))
            lf=mij;
        else
            li=mij;

    }

    if(verif(li))
        fprintf(fout,"%d\n",li);
    else
        fprintf(fout,"%d\n",lf);

    fclose(fin);
    fclose(fout);
    return 0;
}