Cod sursa(job #2665407)

Utilizator andrei_ciobanuciobanu andrei andrei_ciobanu Data 30 octombrie 2020 18:17:37
Problema Transport Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>

#define N 16000
#define MAX 256000000 //16000^2

int sum[N + 1], k, n;

int is_good(int volume){
    int ind = 1, transports = 0;
    int start, end, mij;
    while (transports < k && ind <= n){
        start = ind; end = n;
        while (end - start > 0){
            mij = (start + end) / 2;
            if (sum[mij] - sum[ind - 1] <  volume) start = mij + 1;
            else end = mij;
        }
        ind = start;
        transports ++;
    }
    if (ind >= n) return 1;
    return 0;
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("transport.in", "r");
    fout = fopen("transport.out", "w");
    fscanf(fin, "%d%d", &n, &k);
    int i, x;
    for (i = 1; i <= n; i ++){
        fscanf(fin, "%d", &x);
        sum[i] = sum[i-1] + x;
    }
    int start = 1, end = MAX, mij;
    while (end - start > 0){
        mij = (start + end) / 2;
        if (is_good(mij)) end = mij;
        else start = mij + 1;
    }
    fprintf(fout, "%d", end);
    return 0;
}