Cod sursa(job #1721582)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 25 iunie 2016 23:14:18
Problema Transport Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>

FILE *in, *out;

int v[16000], n, k;

int mere(int x)
{
    int i, s, ture;

    ture = k;
    s = 0;
    for(i = 0; i < n; i++) {
        if(s + v[i] > x) {
            ture--;
            s = v[i];
        } else {
            s = s + v[i];
        }
    }
    ture--;
    if(ture >= 0) {
        return 1;
    } else {
        return 0;
    }
}

int main ()
{
    int i, max, s, m, dr, st;

    in = fopen("transport.in", "r");
    out = fopen("transport.out", "w");

    fscanf(in, "%d%d", &n, &k);

    s = 0;
    max = 0;
    for(i = 0; i < n; i++) {
        fscanf(in, "%d", &v[i]);
        if(v[i] > max) {
            max = v[i];
        }
        s = s + v[i];
    }

    st = max;
    dr = s;
    while(st < dr - 1) {
        m = (st + dr) / 2;
        if(mere(m)) {
            dr = m;
        } else {
            st = m;
        }
    }
    if(!mere(m)) {
        m++;
    }

    fprintf(out, "%d", m);
    //fprintf(out, "%d", mere(8));

    fclose(in);
    fclose(out);

    return 0;
}