Cod sursa(job #2591838)

Utilizator Rares5000Baciu Rares Rares5000 Data 31 martie 2020 14:52:53
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>

using namespace std;

ifstream fin("transport.in");
ofstream fout("transport.out");

int n, k, sol;

int a[16002], top;

bool check(int rez)
{
    int i, cntk = 0, sum = 0;
    for(i = 1; i <= n; i++)
    {
        if(sum + a[i] <= rez)
            sum += a[i];
        else if(sum + a[i] > rez)
        {
            sum = a[i];
            cntk++;
        }
    }
    return cntk < k;
}

void Task()
{
    int sum = 0, maxx = 0, i;
    for(i = 1; i <= n; i++)
    {
        fin >> a[i];
        sum += a[i];
        maxx = max(maxx, a[i]);
    }
    int st, dr, mij;
    st = maxx;
    dr = sum;
    while(st <= dr)
    {
        mij = st + (dr - st) / 2;
        if(check(mij))
            dr = mij - 1;
        else st = mij + 1;
    }
    fout << st;
}

int main()
{
    fin >> n >> k;
    Task();
    return 0;
}