Cod sursa(job #1495673)

Utilizator TopiAlexTopala Alexandru TopiAlex Data 3 octombrie 2015 13:16:48
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#define N_MAX 16002
using namespace std;

FILE *f, *g;
int v[N_MAX];
int sPart[N_MAX];
int n, k;
int max = -1;

//bool found = false;

void citire();

int main()
{
    int st, dr, m;
    int t, s;
    int mMax;
    int i;
    citire();

    st = max;
    dr = sPart[n];

    while (st <= dr){
        m = (st + dr)/2;

        //t = transporta(m);
        t = 0;
        for (i = 1; i <= n;){
            s = 0;
            while (s + v[i] <= m && i <= n){
                s += v[i];
                i++;
            }
            t++;
        }

        if (t <= k){
            mMax = m;
            dr = m - 1;
        }else
            st = m + 1;
    }

    fprintf(g, "%d\n", mMax);

    fclose(g);

    return 0;
}

void citire(){
    f = fopen("transport.in", "r");
    g = fopen("transport.out", "w");

    fscanf(f, "%d%d", &n, &k);

    for (int i = 1; i <= n; ++i){
        fscanf(f, "%d", &v[i]);
        sPart[i] = sPart[i-1] + v[i];
        if (v[i] > max)
            max = v[i];
    }

    fclose(f);
}