Cod sursa(job #2395000)

Utilizator STEFAN163Stefan Caradeanu STEFAN163 Data 2 aprilie 2019 09:46:30
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>

using namespace std;
const int NMAX=16000;
int v[NMAX+5]; //16005*4B=64020B/1000000<1MB
int n, k;
ifstream fin ("transport.in");
ofstream fout ("transport.out");

bool ok(int C)
{
    int i, sc, tr;
    sc=tr=0;
    for(i=1;  i<=n; i++)
        {
            if(v[i]>C)
                return 0;
            if(sc+v[i]<=C)
                sc=sc+v[i];
            else
            {
                tr++;
                sc=v[i];
            }
        }
    if(sc>0)
    tr++;
    return tr<=k;
}
    int bsL(int st, int dr)
        {
            int med, last=-1;
            while(st<=dr)
            {
                med=(st+dr)/2;
            if(ok(med))
                {
                    last=med;
                    dr=med-1;
                }
                else
                    st=med+1;
            }
            return last;
        }
int main()
{
    int i, s=0;
    fin>>n>>k;
    for(i=1; i<=n; i++)
    {
        fin>>v[i];
        s=s+v[i];
    }
    fout<<bsL(1, s);
    fin.close();
    fout.close();
    return 0;
}