Cod sursa(job #3160794)

Utilizator tileadaviddavid tilea tileadavid Data 25 octombrie 2023 08:46:41
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream cin ("transport.in");
ofstream cout ("transport.out");

int minn, maxx;
int m, v[16000];

int nurofen (int n){
    int sum = 0, knt = 0;

    for (int i = 0; i < m; ++i){
        if (sum + v[i] > n){
            ++knt;
            sum = v[i];
        }
        else{
            sum += v[i];
        }
    }

    return knt + 1;

}

int cautare (int k){
    int st = minn;
    int dr = maxx;
    int sol;

    while (st <= dr){
        int mid = (st + dr) / 2;

        if (nurofen (mid) > k){
            st = mid + 1;
        }
        else if (nurofen (mid) <= k){
            sol = mid;
            dr = mid - 1;
        }
    }

    return sol;

}

int main()
{
    int k;
    cin >> m >> k;

    for (int i = 0; i < m; ++i){
        cin >> v[i];
        maxx += v[i];
        minn = max (minn, v[i]);
    }


    cout << cautare(k);

    return 0;
}