Pagini recente » Cod sursa (job #3183372) | Cod sursa (job #3165881) | Cod sursa (job #2723072) | Cod sursa (job #2268634) | Cod sursa (job #1235332)
#include <stdio.h>
using namespace std;
FILE *f = fopen( "transport.in", "r" );
FILE *g = fopen( "transport.out", "w" );
const int MAX = 16005;
int N, K;
int a[MAX];
int OKNR( int nr ); /// 1 - ok; -1 - nr trebuie mai mare
int main()
{
int nr, i;
bool gt = false;
int OK;
fscanf( f, "%d%d", &N, &K );
for ( i = 1; i <= N; i++ )
fscanf( f, "%d", &a[i] );
int st = 0, dr = MAX * MAX;
while ( !gt )
{
nr = ( st + dr ) / 2;
OK = OKNR( nr );
if ( OK == -1 )
{
if ( OKNR( nr + 1 ) == 1 )
{
gt = true;
nr++;
}
else
st = nr + 1;
}
else
dr = nr - 1;
}
fprintf( g, "%d\n", nr );
fclose(f);
fclose(g);
return 0;
}
int OKNR( int nr )
{
int i = 1, j = 0, c = 0;
while ( j < K )
{
j++; // mai fac un transport
while ( c + a[i] <= nr && i <= N )
c += a[i], i++;
if ( i > N )
return 1;
c = 0;
}
return -1;
}