Pagini recente » Cod sursa (job #1777214) | Cod sursa (job #1103798) | Cod sursa (job #2910047) | Cod sursa (job #812414) | Cod sursa (job #207036)
Cod sursa(job #207036)
/*transport*/
#include<fstream.h>
long v[16005],k,v_max,s,d,st,dr,m;
int n,id;
ifstream fin("transport.in");
ofstream fout("transport.out");
void citire()
{
int i;
fin>>n>>k;
for(i=0;i<n;i++)
{
fin>>v[i];
s+=v[i];
if(v[i]>v_max)
v_max=v[i];
}
}
int verifica(long d)
{
int i;
long sv,cont=0;
for(i=0;i<n&& cont<k;)
{
sv=d;
while(sv-v[i]>=0&&i<n)
{
sv-=v[i];
i++;}
cont++;
}
if(i<n)
return 0;
else
if(cont<k)
return 2;
else
return 1;
}
int main()
{
int ok=0;
citire();
if(s%k!=0)
d=s/k+1;
else
d=s/k;
if(d<v_max)
d=v_max;
st=v_max;
dr=s;
while(ok==0)
{
if(st<=dr)
{ m=(st+dr)/2;
id=verifica(m);
if(id==0)
st=m+1;
else
if(id==2)
dr=m-1;
else
if(verifica(m-1)==0)
ok=1;
else
{
dr=m-1;
}
}
else ok=1;
}
fout<<m<<'\n';
fout.close();
return 0;
}