Cod sursa(job #2507622)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 10 decembrie 2019 17:17:59
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>
#include<fstream>
#define N 16005
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");

int n,k,sum,a[N];
int vmax;

void solve()
{
    int i,st,dr,mij;
    int sol,nr,s;
    st=vmax;//capacitatea secventei trb neaparat>=vmax
    dr=sum;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        nr=1;
        s=0;
        //calculam cate secvente cu s<=mij ar fi
        for(i=1;i<=n;++i)
        {
            s+=a[i];
            if(s>mij)
            {
                nr++;
                s=a[i];
            }
        }
       // cout<<st<<" "<<mij<<" "<<dr<<" "<<nr<<"\n";
        if(nr>k)//sunt mai mult de k secvente
        {
            //avem nevoie de o capacitate mai mare
            st=mij+1;
        }
        else
        {
            //pastram solutia
            sol=mij;
            //dar verificam daca nu exista una si mai buna
            dr=mij-1;
        }
    }
    fout<<sol;

}

int main()
{
    int i;
    fin>>n>>k;
    for(i=1;i<=n;++i)
    {
        fin>>a[i];
        if(a[i]>vmax)vmax=a[i];
        sum+=a[i];
    }
    solve();


    return 0;
}