Cod sursa(job #2869304)

Utilizator dumitru.ursuUrsu Dumitru dumitru.ursu Data 11 martie 2022 13:51:49
Problema Transport Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

int verifica(int m, int n, int a[16001]) {
    int t = 1, s = 0;
    for (int i = 1; i <= n; i++) {
        if (s + a[i] <= m)
            s += a[i];
        else {
            t++;
            s = a[i];
        }  
    }
    return t;
}

int main(void) {
    int N, K, V, d = 0, s = 1, m, sol = 0;
    int a[16001];

    FILE* f = fopen("transport.in", "rt");
    FILE* g = fopen("transport.out", "wt");

    do {
        fscanf(f, "%d %d", &N, &K); //nr de saltele
    } while ((N < 1 || N > 16000) && (K < 1 || K > 16000));

    for (int i = 0; i < N; i++) {
        do {
            fscanf(f, "%d", &V); //volumele saltelelor
        } while (V < 1 || V > 16000);
        a[i] = V;
        d += V;
    }

    while (s <= d) {
        m = (s + d) / 2;
        if (verifica(m, N, a) <= K) {
            d = m - s;
            sol = m;
        }
            
        else
            s = m + 1;
    }

    fprintf(g, "%d", sol);
    fclose(f);
    fclose(g);
    return 0;
}