Cod sursa(job #2483296)

Utilizator szaszdavidSzasz David szaszdavid Data 29 octombrie 2019 17:31:06
Problema Transport Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMax = 16000;
const int oo = 16000*16000;
int X[NMax + 5],N,K,Max = 0,Sol = -1;
void Read()
{
    fin >> N >> K;
    for(int i = 1; i <= N; ++i)
        fin >> X[i],Max = max(Max,X[i]);
}

int Check(int C)
{
    int Nr = 0;
    int i,z;
    z=C;
    for(i=1;i<=N;i++)
    {
        if(z-X[i]<=0)
        {
            Nr++;
            z=C;
        }
        z -= X[i];
    }

    return (Nr <= K);
}

void Solve()
{
    int Left = Max, Right = oo;
    while(Left <= Right)
    {
        int Mid = (Left + Right)/2;
        if(Check(Mid))
        {
            Sol = Mid;
            Right = Mid - 1;
        }
        else
            Left = Mid + 1;
    }
}

void Print()
{
    fout << Sol << "\n";
}

int main()
{
    Read();
    Solve();
    Print();
    return 0;
}