Cod sursa(job #817167)

Utilizator Master011Dragos Martac Master011 Data 17 noiembrie 2012 13:35:30
Problema Transport Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
#define MAX 16000
FILE *fin,*fout;
int n,k;
int v[MAX];
int max=0,min=-1;

int ok(int kk){
    int nr=0,cont=0;
    int verif=0;
    int sum=0;
    while(cont<n){
        verif=0;
        sum=0;
        while(verif==0){
            if(sum+v[cont]<=kk){
                sum+=v[cont];
                cont++;
            }
            else
            verif=1;
        }
        nr++;
    }
   return nr;
}

int bin(){
    int m;
    while(min<(max-1)){
        m=(max+min)/2;
        if(ok(m)<=k)
            max=m;
        else
            min=m;
    }
    return min+1;
}
int main(){
    fin=fopen("transport.in","r");
    fout=fopen("transport.out","w");
    int i;
    fscanf(fin,"%d%d",&n,&k);
    for(i=0;i<n;i++){
        fscanf(fin,"%d",&v[i]);
        if(v[i]>min)
            min=v[i];
        max+=v[i];
    }
    min--;
    max++;
    int rez=bin();
    fprintf(fout,"%d",rez);
    fclose(fin);
    fclose(fout);
    return 0;
}