Pagini recente » Cod sursa (job #1738867) | Cod sursa (job #2728963) | Cod sursa (job #556802) | Cod sursa (job #1363169) | Cod sursa (job #122472)
Cod sursa(job #122472)
/*80 puncte
WA pe 1,2
*/
#include <stdio.h>
#define in "transport.in"
#define out "transport.out"
#define NMAX 16003
int n, MAXIM, _poz, count, K;
int VOL[NMAX];
int st, dr, mij;
int Ok( int C );
int main()
{
freopen( in, "r", stdin );
freopen( out, "w", stdout );
scanf( "%d%d", &n, &K );
int i;
for ( i = 1; i <= n; ++i )
{
scanf( "%d", &VOL[i] );
MAXIM += VOL[i];
}
//cautarea binara
st = 1;
//dr = MAXIM;
dr = 2000000000;
while ( st <= dr )
{
mij = ((st+dr)>>1);
if ( Ok(mij) ) dr = mij-1;
else st = mij+1;
}
printf( "%d\n", st );
return 0;
}
int Ok( int C )
{
int suma = 0;
int i;
count = 0;
suma = VOL[1];
for ( i = 2; i <= n; ++i )
{
if ( (suma + VOL[i]) > C )
{
count++;
suma = VOL[i];
}
else suma += VOL[i];
}
if ( suma <= C )
{
count++;//ramasita de transportat se incadreaza intr-un drum
}
/*
else if ( suma > C ) // nu se incadreaza intr-un drum
{
if ( suma % C == 0 ) count += (suma / C);
else count += ( (suma / C) + 1);
}*/
else
{
count = K+1;
}
if ( count <= K ) return 1;
return 0;
}