Cod sursa(job #1527403)

Utilizator dcmionutIonut Deaconu dcmionut Data 18 noiembrie 2015 01:18:30
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
int a[16001], n, k;
int verif (int capac)
{
    int sum = 0, drum = 0;
    for (int i = n; i >= 1; i--) {
        if (sum + a[i] > capac) {
            sum = a[i];
            drum++;
        }
        else sum += a[i];
    }
    if (sum != 0)
        drum++;
    return drum;
}
int main()
{
    int l, r, rez, m, max_a = 0;
    ifstream f("transport.in");
    ofstream g("transport.out");
    f >> n >> k;
    for (int i = n; i >= 1; i--) {
        f >> a[i];
        if (a[i] > max_a) max_a = a[i];
    }
    r = n * 16000;
    l = max_a;
    while (l <= r) {
        m = l + (r - l) / 2;
        if (verif (m) == k)
            if (verif (m-1) > k) {
                rez = m;
                break;
                }
            else r = m - 1;
        if (verif (m) < k)
            r = m - 1;
        else l = m + 1;
    }
    g << rez;
    f.close ();
    g.close ();
    return 0;
}