Cod sursa(job #2670918)

Utilizator codicaMaria Lovin codica Data 10 noiembrie 2020 22:30:41
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>

using namespace std;
ifstream fin ("transport.in");
ofstream fout ("transport.out");
int v[16001],n,k,i,tr,maxi;
long sum,s,mini,r,mid,l;
int nrtr(long mid)
    {
        tr=0;
        i=1;
        while (i<=n)
        {
            s=0;
            while (s+v[i]<=mid && i<=n)
            {
               s=s+v[i];
               i++;
            }
            tr++;
        }
        return tr;
    }
int main()
{
    fin>>n>>k;
    for (i=1;i<=n;i++)
    {
        fin>>v[i];
        sum=sum+v[i];
        if (v[i]>maxi)
            maxi=v[i];
    }
    if (k==1)
        fout<<sum;
    else if (n==k)
        fout<<maxi;
    else
    {
        l=maxi;
        r=sum;
        mini=sum;
        while (l!=r)
        {

            mid=(l+r)/2;
            tr=nrtr(mid);
            if (tr<k) r=mid-1;
            else if (tr>k) l=mid+1;
            else
            {
                if (nrtr(mid-1)>k)
                    mini=mid;
                else
                    r=mid-1;
                /*if (mid<mini)
                    mini=mid;*/
            }
        }
        fout<< mini;
    }
    return 0;
}