Mai intai trebuie sa te autentifici.

Cod sursa(job #3041639)

Utilizator SarakottoBogudanSaracut Bogdan Andrei SarakottoBogudan Data 31 martie 2023 21:17:19
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>

using namespace std;

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

vector < int > v;

int main()
{
    v.resize(16001);
    int n, k, sum = 0;
    cin >> n >> k;
    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
        sum += v[i];
    }
    int st = 1, dr = sum, ans = -1, c = 0;
    while(st <= dr)
    {
        int m = (st + dr) / 2;
        bool ok = true;
        int c = 0, s = 0;
        for(int i = 1; i <= n; i++)
        {
            s += v[i];
            if(s == m)
            {
                s = 0;
                c++;
            }
            else if(s > m)
            {
                c++;
                s = v[i];
            }
            if(i == n && s < m)
            {
                c++;
            }
            if(v[i] > m)
            {
                ok = false;
            }
        }
        if(ok == true)
        {
            if(c > k)
            {
                st = m + 1;
            }
            else
            {
                ans = m;
                dr = m - 1;
            }
        }
        else
        {
            st = m + 1;
        }
    }
    cout << ans;
    return 0;
}