Pagini recente » Cod sursa (job #2179265) | Cod sursa (job #1370776)
#include <iostream>
#include <cstdio>
#define n_max 16005
using namespace std;
int n,v[n_max],k,S;
void citire()
{
scanf( "%d %d" , &n , &k ) ;
for ( int i = 1 ; i <= n ; i ++ )
{
scanf( "%d" , &v[i] ) ;
S += v[i] ;
}
}
int verif( int nr )
{
int ant = 0 , ct = 0 , p = 1 , s ;
while ( p <= n )
{
s = 0 ;
while ( p <= n && s + v[p] <= nr )
s += v[p++] ;
ant ++ ;
if ( ant > k )
return -1 ;
}
if ( ant == k )
return 0 ;
return 1 ;
}
void cautbin()
{
int f = -1 ;
if ( k == 1 )
{
printf( "%d\n" , v[n] ) ;
return ;
}
int st , dr ;
st = S / k ;
if ( S % k )
st ++ ;
dr = S / ( k - 1 ) ;
if ( S % ( k - 1 ) )
dr ++ ;
while ( st <= dr )
{
int m = st + ( dr - st ) / 2 ;
int cond = verif(m) ;
if ( cond == 0 )
{
f = m ;
dr = m - 1 ;
}
else if ( cond == 1 )
dr = m - 1 ;
else
st = m + 1 ;
}
printf( "%d\n" , f ) ;
}
int main()
{
freopen( "transport.in" , "r" , stdin ) ;
freopen( "transport.out" , "w" , stdout ) ;
citire() ;
cautbin() ;
return 0;
}