Pagini recente » Cod sursa (job #1445917) | Cod sursa (job #1746681) | Cod sursa (job #7347) | Cod sursa (job #1834671) | Cod sursa (job #2065572)
#include <fstream>
#define Nmax 160002
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[Nmax],n,k,sum,nrmax;
void Read(int &n,int &k,int v[Nmax])
{
int i;
fin>>n>>k;
for(i=1;i<=n;++i){ fin>>v[i]; sum=sum+v[i]; nrmax=max(v[i],nrmax);}
}
long long TestTransport(long long val)
{
int i;
int s=v[1]; int nr=1;
for(i=2;i<=n;++i)
{
if(s+v[i]<=val) s=s+v[i];
else {++nr; s=0;}
}
return nr;
}
long long CautareBinara(long long s,long long d,int k)
{
if(s<d)
{
long long m=s+(d-s)/2;
long long val=TestTransport(m);
if(val==k)return m;
if(val>k)return CautareBinara(m+1,d,k);
else return CautareBinara(s,m-1,k);
}
return s;
}
int main()
{
Read(n,k,v);
long long val=CautareBinara(nrmax,sum,k);
while(val-1>=nrmax&&TestTransport(val-1)<=k)--val;
fout<<val<<"\n";
return 0;
}