Pagini recente » Cod sursa (job #2767646) | Cod sursa (job #210810) | Cod sursa (job #195087) | Cod sursa (job #1149352) | Cod sursa (job #2421443)
#include <stdio.h>
#include <stdlib.h>
int v[16000];
int main() {
FILE *fin, *fout;
long long n, k, i, nr, suma, cap, st, dr, mijl, rez, max;
fin = fopen( "transport.in", "r" );
fscanf( fin, "%lld%lld", &n, &k );
suma = 0;
max = 0;
for( i = 0; i < n; i++ ) {
fscanf( fin, "%lld", &v[i] );
suma += v[i];
if( v[i] > max )
max = v[i];
}
fclose( fin );
st = max;
dr = suma;
rez = 2000000000000;
while( st <= dr ) {
mijl = ( st + dr ) / 2;
nr = 1;
cap = 0;
for( i = 0; i < n; i++ ) {
cap += v[i];
if( cap > mijl ) {
cap = v[i];
nr++;
}
}
if( nr < k )
dr = mijl - 1;
else if( nr > k )
st = mijl + 1;
else {
dr = mijl - 1;
if( mijl < rez )
rez = mijl;
}
}
fout = fopen( "transport.out", "w" );
fprintf( fout, "%lld", rez );
fclose( fout );
return 0;
}