Cod sursa(job #2655837)

Utilizator ASebastianA Sebastian ASebastian Data 5 octombrie 2020 18:17:03
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int v[16001], saltele, transporturi;
int checkTransport (int a) {
    int load=0, c=0;
    for (int i=1; i<=saltele; i++) {
        load += v[i];
        if (load > a) {
            c++;
            i--;
            load = 0;
        }
        else if (load == a) {
            c++;
            load = 0;
        }
    }
    if (load != 0)
        c++;
    return c;
}
int main()
{
    cin >> saltele >> transporturi;
    int maxim=0, sum=0;
    for (int i=1; i<=saltele; i++) {
        cin >> v[i];
        if (v[i] >= maxim)
            maxim = v[i];
            sum+=v[i];
    }

//    for (int i=7; i<=1000; i++)
//        cout << checkTransport(i) << "|";

    /// cautam binar valoarea cea mai din stanga unde nr de transporturi ce tb efectuat este mai mic decat nr max de transporturi
    /// ex: daca am 4 3 3 3 2 2 1 1 1 1 1 1 iar val max este 3, atunci se va gasi pozitia 2.
    int s = maxim, d=sum, mid, last = -1;
    while (s <= d) {
        mid = (s + d) / 2;
        if (checkTransport(mid) <= transporturi) {
            last = mid;
            d = mid - 1;
        }
        else
            s = mid + 1;
    }
    cout << last;
    return 0;
}