Cod sursa(job #1200446)

Utilizator diana97Diana Ghinea diana97 Data 22 iunie 2014 15:04:09
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("transport.in");
ofstream g ("transport.out");

int n, k;
int sum;
int v[16001];

void citeste () {
    f >> n >> k;
    for (int i = 1; i <= n; i++) {
        f >> v[i];
        sum += v[i];
    }
}

bool ok (int x) {
    int crt = 0, nr = 1;
    for (int i = 1; i <= n; i++) {
        if (crt + v[i] > x) {
            nr++;
            crt = v[i];
            if (nr > k) return 0;
        }
        else crt += v[i];
    }
    return true;
}

void rezolva () {
    int st = 1, dr = sum, mij;
    int sol = sum;
    while (st <= dr) {
        mij = (st + dr) / 2;
        if (ok(mij)) {
            dr = mij - 1;
            sol = min (sol, mij);
        }
        else st++;
    }
    g << sol << '\n';
}

int main () {
    citeste ();
    rezolva ();
    return 0;
}