Pagini recente » Cod sursa (job #939889) | Cod sursa (job #442415) | Cod sursa (job #1630142) | Cod sursa (job #2685650) | Cod sursa (job #2662458)
//Mihai Priboi
#include <stdio.h>
#include <stdlib.h>
int v[16000], n;
int cautbin( int x ) {
int r, pas;
pas = 1 << 27;
r = 0;
while( pas ) {
if( transporturi(r + pas) > x )
r += pas;
pas /= 2;
}
return r;
}
int transporturi( int vol ) {
int k, vcur, i;
k = 1;
vcur = 0;
for( i = 0; i < n; i++ ) {
if( vcur + v[i] <= vol )
vcur += v[i];
else if( v[i] > vol )
return 16000;
else {
k++;
vcur = v[i];
}
}
return k;
}
int main() {
FILE *fin, *fout;
int k, i, r;
fin = fopen( "transport.in", "r" );
fscanf( fin, "%d%d", &n, &k );
for( i = 0; i < n; i++ )
fscanf( fin, "%d", &v[i] );
fclose( fin );
fout = fopen( "transport.out", "w" );
r = cautbin(k);
while( transporturi(r) > k ) r++;
fprintf( fout, "%d", r );
fclose( fout );
return 0;
}