Pagini recente » Cod sursa (job #243338) | Cod sursa (job #172832) | Cod sursa (job #1703864) | Cod sursa (job #3284433) | Cod sursa (job #183787)
Cod sursa(job #183787)
#include <stdio.h>
FILE *f,*g;
int n,rez,v[16005],max,k;
long long s;
void citire(){
fscanf(f,"%d %d",&n,&k);
int i;
for(i=1;i<=n;i++){
fscanf(f,"%d",&v[i]);
max=v[i]>max?v[i]:max;
s+=v[i];
}
}
int ok(long h){
int i,c;
long sac;
sac=0;
c=1;
for(i=1;i<=n;i++){
if(sac+v[i]>h) {sac=0;c++;}
sac+=v[i];
}
if(c<=k)return 1;
return 0;
}
long long cautare(long long prim,long long ultim){
if(prim>ultim)return -1;
long long m;
m=(prim + ultim)/2;
if(ok(m)){ rez=m;return cautare(prim,m-1);}
return cautare(m+1,ultim);
}
int main(){
f=fopen("transport.in","r");
g=fopen("transport.out","w");
citire();
cautare(max,s);
fprintf(g,"%ld",rez);
int m;
//while(p<u){
// m=(prim+ultim)/2;
//if(ok)
fclose(f);
fclose(g);
return 0;
}