Pagini recente » Cod sursa (job #1173300) | Cod sursa (job #2088029) | Cod sursa (job #1107183) | Cod sursa (job #1174924) | Cod sursa (job #1075288)
#include <iostream>
#include <fstream>
using namespace std;
int a[100006];
int main()
{
ifstream f("transport.in");
ofstream g("transport.out");
int n,s=0,k,t,rez;
f >> n >> k;
for(int i=1;i<=n;++i)
{
f >> a[i];
s=s+a[i];
}
t=s/k;
int mid,st,dr;
st=t;
dr=s;
while(st<=dr)
{
mid =(st+dr)/2;
int v=1,cmid;
cmid=mid;
for(int i=1;i<=n;++i)
{
if(a[i]<=mid)
{
mid=mid-a[i];
}
else
{
mid=cmid;
mid=mid-a[i];
++v;
}
}
if(v==k)
{
rez=cmid;
break;
}
if(v<k)
{
dr=cmid-1;
}
if(v>k)
{
st=cmid+1;
}
}
int q=1,w=1,cm=rez,cn;
while(q)
{
--cm;
cn=cm;
w=1;
for(int i=1;i<=n;++i)
{
if(a[i]<=cm)
{
cm=cm-a[i];
}
else
{
cm=cn;
cm=cm-a[i];
++w;
}
}
cm=cn;
if(w!=k) --q;
}
g << cn+1;
return 0;
}