Cod sursa(job #1512274)

Utilizator FairPlay94George Cioroiu FairPlay94 Data 27 octombrie 2015 21:08:35
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>

using namespace std;

int main() {
    freopen("transport.in", "r", stdin);
    freopen("transport.out", "w", stdout);

    ios::sync_with_stdio(false);
    cin.tie(0);

    int n, k, v[16005], dr = 0, st = 0;
    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        dr += v[i];
        if (v[i] > st) {
            st = v[i];
        }
    }
    while (st <= dr) {
        int mij = (st + dr) / 2, nr = 1, aux = mij;
        for (int i = 0; i < n; i++) {
            if (v[i] <= aux) {
                aux -= v[i];
            } else {
                nr++;
                aux = mij - v[i];
            }
        }
        if (nr <= k) {
            dr = mij - 1;
        } else {
            st = mij + 1;
        }
    }
    cout << st;

    return 0;
}