Pagini recente » Borderou de evaluare (job #2582288) | Borderou de evaluare (job #2987507) | Borderou de evaluare (job #2134438) | Borderou de evaluare (job #1156538) | Cod sursa (job #2977832)
#include <bits/stdc++.h>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int NMAX = 16000;
const int DRUMMAX = NMAX * NMAX;
int v[NMAX+1];
int main()
{
int n, k, i;
in >> n >> k;
for( i = 1 ; i <= n ; i++ )
in >> v[i];
int st = 1, dr = DRUMMAX, ans;
while( st <= dr ){
int suma = v[1], drumuri = 0, rez = ( st + dr ) / 2;
if( suma <= rez ){
for( i = 2 ; i <= n && drumuri < k; i++ ){
suma += v[i];
if( suma > rez )
drumuri++, suma = v[i];
else if( suma == rez ){
suma = 0;
drumuri++;
}
}
if( i == n+1 ){
if( drumuri < k || ( drumuri == k && suma == 0 )){
dr = rez-1;
ans = rez;
}
else
st = rez + 1;
}
else
st = rez + 1;
}
else
st = rez + 1;
}
out << ans << endl;
return 0;
}