Cod sursa(job #1030833)

Utilizator EmplopiStefan Nitu Emplopi Data 15 noiembrie 2013 17:01:05
Problema Transport Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

int v[16000];

int main(){
    FILE *fin, *fout;
    int n, k, s, a, b, mid, nrtr, i, x, max;
    fin=fopen("transport.in", "r");
    fout=fopen("transport.out", "w");
    fscanf(fin, "%d%d", &n, &k);
    s=0;
    max=0;
    for(i=0; i<n; i++){
        fscanf(fin, "%d", &v[i]);
        if(max<v[i])
            max=v[i];
        s=s+v[i];
    }
    a=0;
    b=s;
    nrtr=0;
    if(k==1)
        mid=s;
    else{
        while(nrtr!=k || mid<max){
            mid=(a+b)/2;
            nrtr=0;
            s=0;
            for(i=0; i<n; i++){
                if(s+v[i]>mid){
                    nrtr++;
                    s=0;
                }
                s=s+v[i];
            }
            nrtr++;
            if(nrtr>k)
                a=mid;
            if(nrtr<k)
                b=mid;
        }
    }
    fprintf(fout, "%d", mid);
    fclose(fin);
    fclose(fout);

    return 0;
}