Cod sursa(job #2834519)

Utilizator andreea_eliza_8Radu Andreea Eliza andreea_eliza_8 Data 17 ianuarie 2022 10:19:37
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
int stiva[16005];
ifstream fin("transport.in");
ofstream fout("transport.out");

bool incape(int capacitate, int k, int n)
{
    int sum=0, nrtrans=0;
    for(int i=1; i<=n; i++)
    {
        sum+=stiva[i];
        if(sum>capacitate)
        {
            nrtrans++;
            sum=stiva[i];
        }
    }
    return nrtrans+1<=k;
}

int bs(int maxim, int s, int k, int n)
{
    int lf=maxim, rg=s, capacitate=-1;
    while(lf<=rg)
    {
        int med=(lf+rg)/2;
        if(incape(med, k, n))
        {
            rg=med-1;
            capacitate=med;
        }
        else
            lf=med+1;
    }
    return capacitate;
}

int main()
{
    int n, k, maxim=-1, s=0;
    fin>>n>>k;
    for(int i=1; i<=n; i++)
    {
        fin>>stiva[i];
        if(stiva[i]>maxim)
            maxim=stiva[i];
        s+=stiva[i];
    }
    fout<<bs(maxim, s, k, n);
    return 0;
}