Cod sursa(job #2911044)

Utilizator TudosieRazvanTudosie Marius-Razvan TudosieRazvan Data 26 iunie 2022 15:32:25
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda 3_iulie Marime 1.05 kb
#include <fstream>
#define NMAX 16000
using namespace std;

int n, v[NMAX + 1], k;
int maxim = 0, suma = 0;

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

int calcNum(int val)
{
    int nri = 1, sum = 0;
    for (int i = 1; i <= n; i++)
    {
        sum += v[i];
        if (sum > val)
        {
            sum = v[i];
            nri++;
        }
    }
    return nri;
}

int main()
{
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        fin >> v[i];
        suma += v[i];
        if (v[i] > maxim)
        {
            maxim = v[i];
        }
    }

    int st = maxim, dr = suma;
    int sol = -1;
    while (st <= dr)
    {
        int mij = (st + dr) / 2;
        int interv = calcNum(mij);
        //fout<<interv<<" "<<st<<" "<<dr<<"\n";
        if (interv <= k)
        {
            //caut in stanga
            sol = mij;
            dr = mij - 1;
        }
        else if (interv > k)
        {
            st = mij + 1;
        }
    }
    fout << sol;
    return 0;
}