Cod sursa(job #2768813)

Utilizator dcovDarius Covaciu dcov Data 12 august 2021 11:44:48
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,k,a[16005],s[16005];

void cit()
{
    f>>n>>k;

    f>>a[0];
    s[0]=a[0];

    for(int i=1;i<n;i++)
    {
        f>>a[i];
        s[i]=s[i-1]+a[i];
    }
}

bool verif(int c)
{
    int s=0,i=0,j=0;

    while(i<n && j<k)
    {
        s+=a[i];

        if(s>c)
        {
            s=a[i];
            j++;
        }

        i++;
    }

    if(j<k)
        return true;

    return false;
}

int valmax()
{
    int vmax=0;

    for(int i=0;i<n;i++)
    {
        if(vmax<a[i])
            vmax=a[i];
    }

    return vmax;
}

int main()
{
    cit();

    long long lg=1;

    for(;lg<s[n-1];lg<<=1);

    int vmax=valmax();
    int i;

    for(i=s[n-1];lg!=0;lg>>=1)
    {
        //bool transp=verif(i-lg);

        if(i-lg>=vmax && verif(i-lg))
            i-=lg;
    }

    g<<i;

    return 0;
}