Cod sursa(job #2074401)

Utilizator copanelTudor Roman copanel Data 24 noiembrie 2017 16:08:29
Problema Transport Scor 50
Compilator c Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>

#define L 13

int v[16000];

int main()
{
    FILE *fin, *fout;
    int n, k;
    int sumall, sum, i, max;
    int pas, r;
    int trans;

    fin = fopen("transport.in", "r");
    fscanf(fin, "%d%d", &n, &k);
    sumall = 0;
    max = 0;
    for (i = 0; i < n; i++) {
        fscanf(fin, "%d", &v[i]);
        if (v[i] > max)
            max = v[i];
        sumall += v[i];
    }
    fclose(fin);

    pas = 1 << L;
    r = 0;
    while (pas != 0) {
        if (r + pas <= sumall) {
            trans = 0;
            i = 0;
            sum = 0;
            while (i < n && trans <= k + 1) {
                if (sum + v[i] <= r + pas) {
                    sum += v[i];
                } else {
                    trans++;
                    sum = v[i];
                }
                i++;
            }
            if (sum > 0) {
                trans++;
            }
            if (trans > k)
                r += pas;
        }
        pas >>= 1;
    }
    r++;
    if (r < max)
        r = max;
    fout = fopen("transport.out", "w");
    fprintf(fout, "%d", r);
    fclose(fout);
    return 0;
}