Cod sursa(job #2869360)

Utilizator dumitru.ursuUrsu Dumitru dumitru.ursu Data 11 martie 2022 14:33:02
Problema Transport Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
main()
{
    long long n, k, i, j, max = 0, m, x, s = 0, t;
    long long aux, sp, valid, ind, fin, min, dd = 256000001;
    int a[16001];
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);
    fscanf(stdin, "%lld%lld", &n, &k);
    for (i = 1; i <= n; i++)
    {
        fscanf(stdin, "%d", &a[i]);
        if (a[i] > max)max = a[i];
        s += a[i];
    }
    ind = max;
    fin = s;
    sp = 0;
    do {
        x = fin - ind; x /= 2;
        if (x == 0)sp = 1;
        x = ind + x;
        i = 1; t = 0;
        do {
            valid = 0;
            s = 0;
            s += a[i];
            i++;
            do {
                if ((s + a[i]) <= x) { s += a[i]; i++; }
                else { valid = 1; t++; s = 0; }
            } while ((valid == 0) && (i <= n));
            if ((s > 0) && (t <= x))t++;

        } while (i <= n);
        if (t <= k) {
            if (x <= dd)dd = x;
            fin = x;
        }
        else ind = x;
    } while (sp == 0);

    fprintf(stdout, "%lld", dd);

    fclose(stdin);
    fclose(stdout);
}