Cod sursa(job #3245965)

Utilizator andycristuAndrei Cristu andycristu Data 1 octombrie 2024 11:49:59
Problema Transport Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
//#include <iostream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int v[16001];
int main()
{
    int n, k, i, st = 1, dr = 16000 * 16000, m, s, nr_trans = 0, ok = 0, aux, max = 0;
    cin >> n >> k;
    for (i = 1;i <= n;i++)
    {
        cin >> v[i];
        if (max < v[i])
        {
            max = v[i];
        }
    }
    st = max;
    while (st <= dr)
    {
        m = (st + dr) / 2;
        ok = 0;
        s = 0;
        nr_trans = 1;
        for (i = 1;i <= n;i++)
        {
            if (v[i] > m)
            {
                ok = 1;
            }
            if (s + v[i] <= m)
            {
                s = s + v[i];
            }
            else if (s + v[i] > m && v[i] <= m)
            {
                nr_trans++;
                s = v[i];
            }

        }
        //cout << m << " " << nr_trans  << " " << st << " " << dr << endl;
        aux = m;
        if (nr_trans > k && ok == 0)
        {
            st = m + 1;
        }
        else if (nr_trans <= k && ok == 0)
        {
            dr = m - 1;
        }
        else if (ok == 1)
        {
            st = m + 1;
        }
    }
    cout << m;
    return 0;
}