Cod sursa(job #3357383)

Utilizator Cezar_ProgramatorulPatrascu Cezar Cezar_Programatorul Data 9 iunie 2026 10:23:02
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, k, v[16005];

int verifica(int C)
{
    int drumuri = 1;
    int volum_curent = 0;

    for(int i=1; i <= n; i++)
    {
        if(volum_curent + v[i] <= C)
        {
            volum_curent = volum_curent + v[i];
        }
        else
        {
            drumuri++;
            volum_curent = v[i];
        }
    }
    return drumuri;
}

int main()
{
    int i, stanga = 0, dreapta = 0, mijloc, capacitate_optima;

    fin >> n >> k;
    for(i = 1; i <= n; i++)
    {
        fin >> v[i];
        dreapta = dreapta + v[i]; 
        if(v[i] > stanga)
        {
            stanga = v[i];        
        }
    }

    capacitate_optima = dreapta;

    
    while(stanga <= dreapta)
    {
        mijloc = (stanga + dreapta) / 2;

        if(verifica(mijloc) <= k)
        {
            capacitate_optima = mijloc; 
            dreapta = mijloc - 1;       
        }
        else
        {
            stanga = mijloc + 1;        
        }
    }

    fout << capacitate_optima;
    return 0;
}