Cod sursa(job #3242185)

Utilizator oliv_1Bostinescu Octavian oliv_1 Data 9 septembrie 2024 18:59:35
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>

using namespace std;
int n,k,v[16500],maxx,sum=0;
bool check(int capacitate,int n,int k)
{

    int j=1,cnt=0,ocupat=0;
    while(j<=n)
    {
        if(ocupat+v[j]>capacitate)
        {
            cnt++;
            ocupat=0;
        }
        ocupat+=v[j];
        j++;
    }
   if(ocupat!=0)
    cnt++;
    if(cnt<=k)
        return 1;
    return 0;
}
int cautbin(int n,int k)
{
    int st=maxx,dr=sum,mid,sol=-1;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(check(mid,n,k)==1)
        {
            sol=mid;
            dr=mid-1;

        }
        else
            st=mid+1;
    }
    return sol;
}
int main()
{
    ifstream cin("transport.in");
    ofstream cout("transport.out");
   cin>>n>>k;
   for(int i=1;i<=n;i++)
   {
       cin>>v[i];
       if(v[i]>maxx)
        maxx=v[i];
       sum+=v[i];
   }
   cout<<cautbin(n,k);
    return 0;
}