Pagini recente » Cod sursa (job #999087) | Cod sursa (job #1648002) | Cod sursa (job #2372021) | Cod sursa (job #2844748) | Cod sursa (job #338884)
Cod sursa(job #338884)
#include<iostream>
#include<string>
using namespace std;
FILE*fin=fopen("transport.in","r");
FILE*fout=fopen("transport.out","w");
#define nm 16005
int n,k,vol[nm],tc[nm];
inline int sum(int a,int b)
{
return tc[b]-tc[a-1];
}
inline int posibil(int val)
{
int top=n,nrt=0,b,t,mid;
while(top)
{
b=1;t=top;
nrt++;
if(vol[top]>val) return 0;
while(b<t)
{
mid=(b+t)/2;
if(sum(mid,top)<=val) t=mid;
else b=mid+1;
}
top=b-1;
if(nrt>k) return 0;
}
return 1;
}
int main()
{
int i,st,dr,mij;
fscanf(fin,"%d%d",&n,&k);
tc[0]=0;
for(i=n;i>=1;i--)
fscanf(fin,"%d",&vol[i]);
for(i=1;i<=n;i++)
tc[i]=tc[i-1]+vol[i];
st=0;dr=2000000000;
while(st<dr)
{
mij=(st+dr)/2;
if(posibil(mij)) dr=mij;
else st=mij+1;
}
fprintf(fout,"%d",st);
fclose(fin);
fclose(fout);
return 0;
}