Cod sursa(job #1527392)

Utilizator dcmionutIonut Deaconu dcmionut Data 18 noiembrie 2015 00:54:57
Problema Transport Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;

int verif (int k, int a[], int n, 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 (i == 1) drum++;
    }
    if (drum <= k) return 1;
    return 0;
}
int main()
{
    int n, k, l, r, rez, a[16001], m, sum = 0, max_a = 0;
    ifstream f("transport.in");
    ofstream g("transport.out");
    f >> n >> k;
    for (int i = n; i >= 1; i--) {
        f >> a[i];
        sum += a[i];
        if (a[i] > max_a) max_a = a[i];
    }
    r = sum;
    l = max_a;
    rez = l;
    while (l != r) {
        m = l + (r - l) / 2;
        if (verif (k, a, n, m)) { rez = m; r = m - 1; }
            else l = m;
    }
    g << rez;
    f.close ();
    g.close ();
    return 0;
}