Cod sursa(job #2922258)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 7 septembrie 2022 12:25:58
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <cmath>
#include <fstream>
#define nmax 16005
using namespace std;
int n,k,v[nmax],mn;
int main()
{
    ifstream f ("transport.in");
    ofstream g ("transport.out");
    f>>n>>k;
    for (int i=1;i<=n;i++)
    {
        f>>v[i];
        mn=max(mn,v[i]);
    }
    int st=mn,dr=256000001,mid,sol=0;
    while (st<=dr)
    {
        mid=(st+dr)/2;
        int k1=k;
        int p=mid,ok=0;
        for (int i=1;i<=n;i++)
        {
            if (p>=v[i])
                p-=v[i];
            else
            {
                k1--;
                p=mid-v[i];
            }
            if (k1==0)
            {
                ok=1;
                break;
            }
        }
        if (ok==1)
        {
            st=mid+1;
        }
        else
        {
            dr=mid-1;
            sol=mid;
        }
    }
    g<<sol;
}