Cod sursa(job #2928291)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 22 octombrie 2022 17:51:20
Problema Transport Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin  ("transport.in");
ofstream fout ("transport.out");

int n[16001],nr,k;
int check(int n);
int main()
{
    int i,ss=0,max=0;
    fin>>nr>>k;
    for(i=1;i<=nr;i++)
    {
         fin>>n[i];
         ss+=n[i];
         if(max<n[i])
         {
             max=n[i];
         }
    }

    int l=max,r=ss,mid,sol=-1;
    while(l<=r)
    {
        mid=(l+r)/2;
        //cout<<l<<" "<<mid<<" "<<r<<"\n";
        if(check(mid))
        {
            sol=mid;
            r=mid-1;
        }
        else
        {
            l=mid+1;
        }

    }
    fout<<sol;
    return 0;
}
int check(int mid)
{
    //cout<<"\n";
    int s=0,dru=0,i;
    for(i=1;i<=nr;i++)
    {
        if(s+n[i]<=mid)
        {
            s+=n[i];
            //cout<<i<<":"<<n[i]<<" "<<s<<" ";
        }
        else
        {
            s=0;
            i--;
            dru++;
        }
    }
    if(s)
    {
        dru++;
    }
    return (dru<=k);
}