Cod sursa(job #2602386)

Utilizator GeorgeCalinPetruta George-Calin GeorgeCalin Data 16 aprilie 2020 19:58:08
Problema Transport Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#define nmax 16002
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");

int saltea[nmax], saltea_maxim = 0;
int numar_saltele, numar_transport;

int sol(int k)
{
    int suma = 0, contor = 0;
    int i = 1;
    while(i <= numar_saltele)
    {
        suma = 0;
        while(suma <= k && i <= numar_saltele)
        {
            suma += saltea[i];
            i++;
        }
        contor++;
        if(i == numar_saltele + 1 && suma <= k)
            break;
        i--;
    }
    return (numar_transport >= contor);
}

void solve()
{
    int stanga = saltea_maxim, dreapta = 200000;
    int solutie;
    while(stanga <= dreapta)
    {
        int mijloc = (stanga + dreapta) / 2;
        if(sol(mijloc) == 1)
        {
            solutie = mijloc;
            dreapta = mijloc - 1;
        }
        else
        {
            stanga = mijloc + 1;
        }
    }
    fout << solutie;
}

int main()
{
    fin >> numar_saltele >> numar_transport;
    for(int i = 1; i <= numar_saltele; i++)
    {
        fin>>saltea[i];
        if(saltea_maxim < saltea[i])
            saltea_maxim =saltea[i];
    }
    solve();
    return 0;
}