Pagini recente » Cod sursa (job #2122071) | Cod sursa (job #2442000) | Cod sursa (job #2583335) | Cod sursa (job #83022) | Cod sursa (job #145492)
Cod sursa(job #145492)
#include<stdio.h>
#define DIM 16001
int n,k,a[DIM],max;
long s;
int main()
{
FILE *f=fopen("transport.in", "r");
FILE *g=fopen("transport.out", "w");
fscanf(f, "%d %d", &n, &k);
max=-1;
s=0;
for(int i=1;i<=n;++i) {
fscanf(f, "%d", &a[i]);
if(a[i]>max)
max=a[i];
s+=a[i];
}
long pmin,pmax,pm,cnt,ss;
pmin=max;
pmax=s;
pm=(pmax+pmin)/2;
while(pm!=pmax&&pm!=pmin){
cnt=0;
ss=0;
for(int i=1;i<=n;++i){
if(ss+a[i]<=pm){
ss+=a[i];
}
else{
++cnt;
ss=a[i];
}
}
++cnt;
if(cnt<=k){
pmax=pm;
pm=(pmin+pmax)/2;
}
else{
pmin=pm;
pm=(pmin+pmax)/2;
}
}
if(pm==pmin){
cnt=0;
ss=0;
for(int i=1;i<=n;++i){
if(ss+a[i]<=pm){
ss+=a[i];
}
else {
++cnt;
ss=a[i];
}
}
++cnt;
if(cnt<=k)
fprintf(g, "%ld\n", pmin);
else
fprintf(g, "%ld\n", pmax);
}
else
fprintf(g, "%ld\n", pmax);
fclose(f);
fclose(g);
return 0;
}