Cod sursa(job #2664454)

Utilizator mihnea_buzoiuMihnea Buzoiu mihnea_buzoiu Data 28 octombrie 2020 17:57:50
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <algorithm>
#include <string.h>

using namespace std;

int v[16001];
int n, k;

bool check(int x){
    int s=0, k2 = k;
    for (int i=0; i<n; i++){
        if (s + v[i] > x){
            k2--;
            s = v[i];
        }
        else s += v[i];

        //printf("%d %d %d\n", v[i], s, k2);
    }

    if (k2 <= 0)
        return false;
    else return true;
}

int main()
{
    FILE * fin = fopen("transport.in", "r");
    FILE * fout = fopen("transport.out", "w");

    fscanf(fin, "%d %d", &n, &k);
    for (int i=0; i<n; i++)
        fscanf(fin, "%d", &v[i]);

    int cmax = 0, cmin = v[0];
    for (int i=0; i<n; i++){
        cmax += v[i];
        cmin = (v[i] > cmin) ? v[i] : cmin;
    }

    while (cmin < cmax){
        int avg = (cmin + cmax) / 2;
        if (check(avg)){
            cmax = avg;
        }
        else {
            cmin = avg + 1;
        }
        //printf("%d %d %d\n", cmin, cmax, avg);
    }

    fprintf(fout, "%d", cmin);

    fclose(fin);
    fclose(fout);
}
//printf("%d %d", start, 4);