Cod sursa(job #1030234)

Utilizator EmplopiStefan Nitu Emplopi Data 15 noiembrie 2013 16:01:29
Problema Transport Scor 10
Compilator c Status done
Runda Arhiva de probleme Marime 1.1 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]);
        printf("%d ", v[i]);
        if(max<v[i])
            max=v[i];
        s=s+v[i];
    }
    printf("\n\n");
    a=0;
    b=s;
    printf("a: %d, b: %d\n", a, b);
    nrtr=0;
    while(nrtr!=k) {
        mid=(a+b)/2;
        nrtr=0;
        s=0;
        for(i=0; i<n; i++) {
            //printf("%d.     s=%d, v[i]=%d, s+v[i]=%d pentru ca mid=%d\n", nrtr, a, v[i], s+v[i], mid);
            if(s+v[i]>mid) {
                nrtr++;
                s=0;
            }
            s=s+v[i];
        }
        printf("Mid=%d, A=%d, B=%d => nrtr=%d\n", mid, a, b, nrtr);
        nrtr++;
        if(nrtr>k)
            a=mid;
        if(nrtr<k)
            b=mid;
    }
    fprintf(fout, "%d", mid);
    fclose(fin);
    fclose(fout);

    return 0;
}