Cod sursa(job #3141335)

Utilizator CimpoesuFabianCimpoesu Fabian George CimpoesuFabian Data 13 iulie 2023 17:56:06
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

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

int volum[16001], n;

int transport(int x, int k)
{
    int i, copie;
    copie = x;
    for (i = 1 ; i <= n ; i++)
    {
        if (x >= volum[i]) x -= volum[i];
        else { --k; x = copie; x -= volum[i]; if (k <= 0) return 0; }
    }
    return 1;
}

int cautarebinara(int st, int dr, int k)
{
    int mij, poz;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (transport(mij,k) == 1)
        {
            poz = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }
    return poz;
}

int main()
{
    int x, i, k, maxim, suma;
    fin >> n >> k;
    maxim = -1;
    suma = 0;
    for (i = 1 ; i <= n ; i++)
    {
        fin >> volum[i];
        maxim = max(volum[i],maxim);
        suma += volum[i];
    }
    fout << cautarebinara(maxim,suma,k);
    return 0;
}