Cod sursa(job #2223080)

Utilizator BatedCrayonBratosin David - Robert BatedCrayon Data 19 iulie 2018 02:34:36
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <iostream>
#define NMAX 16001

using namespace std;

long long int A[NMAX],n,k,C,s,maxim;

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

bool TransportPos(int ip)
{
    if(maxim>ip)
        return false;
    int trans, cap,i;
    trans=0;
    cap=ip;
    i=1;
    while(i<=n)
    {
        while(cap-A[i]>=0)
            cap-=A[i++];
        trans++;
        cap=ip;
    }
    if(trans>k)
        return false;
    return true;
}


int CautBinar()
{
    int p,u,m;
    p=1;
    u=s;
    m=0;
    while(p<=u)
    {
        m=p+(u-p)/2;
        if(TransportPos(m))
            u=m-1;
        else
            p=m+1;
    }
    return m;
}

void Citire()
{
    in>>n>>k;
    for(int i=1; i<=n; i++)
    {
        in>>A[i];
        if(A[i]>maxim)
            maxim=A[i];
        s+=A[i];
    }
}

void Afisare()
{
    out<<C;
}

int main()
{
    Citire();
    C=CautBinar();
    Afisare();
    return 0;
}