Cod sursa(job #2362015)

Utilizator cdenisCovei Denis cdenis Data 2 martie 2019 21:15:38
Problema Transport Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;

#define MAX 16005
#define INT_MAX		2147483647

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

long long n,k,v[MAX],sum,li,ls,mid,s,ct,mi,cap,i;
bool ok;

int main()
{
    fin >> n >> k;
    for(i=1;i<=n;i++)
    {
        fin >> v[i];
        sum+=v[i];
        if(v[i]>mi)
            mi=v[i];
    }
//    fout << mi << " " << sum << '\n';
    li=1;
    ls=cap=sum;
    while(li<ls)
    {
        mid=(li+ls)/2;
        s=0;
        i=1;
        ct=0;
        ok=1;
//        fout << '\n';
        while(i<=n && ok)
        {
            if(v[i]>mid)
                li=mid+1, ok=0;
            s+=v[i];
//            fout << "mid=" << mid << ", v=" << v[i] << ", s=" << s << ", ct=";
            if(s==mid)
                s=0,ct++;
            else if(s>mid)
                s=0,ct++,i--;
            i++;
//            fout << ct << ";" << '\n';
        }
        if(s)
            ct++;
//        fout << "v=" << v[i] << ", s=" << s << ", ct=";
//        fout << ct << ";" << '\n';
//        fout << '\n';
        if(ok)
        {
            if(ct<=k)
            {
                ls=mid-1;
                if(mid<cap)
                    cap=mid;
            }
            if(ct>k)
                li=mid+1;
//            fout << cap << '\n';
//            fout << li << " " << ls << '\n';
        }
    }
    fout << cap;
    return 0;
}