Cod sursa(job #1597610)

Utilizator ArceyGeorge Cioroiu Arcey Data 12 februarie 2016 10:11:18
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>
#include <cstdlib>
#include <iomanip>
#include <cstring>
#include <string>
#include <cmath>

using namespace std;

int f(int v[16000], int n, int vm) {
    int ans = 1, aux = vm;
    for (int i = 0; i < n; i++) {
        if (aux >= v[i])
            aux -= v[i];
        else {
            ans++;
            aux = vm - v[i];
        }
    }
    return ans;
}

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

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

    int n, k, v[16000], left = 0, right = 0;
    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        if (v[i] > left)
            left = v[i];
        right += v[i];
    }
    while (left < right) {
        int mid = (left + right) / 2;
        if (f(v, n, mid) > k)
            left = mid + 1;
        else
            right = mid;
    }
    cout << left;

    return 0;
}