Pagini recente » Concursuri | Cod sursa (job #311943) | Istoria paginii runda/moisil2016-10 | Istoria paginii warm-up-2020/solutii/cuantictiori | Cod sursa (job #1034767)
#include<fstream>
using namespace std;
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
int i,n,k,nr,s,d,c,sum,r;
f>>n>>k;
int v[n+1];
f>>v[1];
s=d=v[1];
for(i=2;i<=n;d+=v[i],++i)
{
f>>v[i];
if(v[i]>s)s=v[i];
}
c=(s+(r=d))>>1;
while(true)
{
for(sum=v[1],i=2,nr=1;i<=n && nr<=k;++i)
if(sum+v[i]<=c)sum+=v[i];
else
{
++nr;
sum=v[i];
}
if(nr<=k && c<r)r=c;
if(nr<=k) c=(s+(d=c))>>1;
else c=((s=c)+d)>>1;
if(c==s || c==d)break ;
}
g<<r<<"\n";
f.close();
g.close();
return 0;
}