Pagini recente » Borderou de evaluare (job #1409416) | Borderou de evaluare (job #2017400) | Borderou de evaluare (job #989800) | Borderou de evaluare (job #3231154) | Cod sursa (job #3274303)
#include <bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int main() {
int n, k;
f >> n >> k;
long long v[n+1];
long long s = 0, maxx = 0;
for( int i = 1; i <= n; ++i )
{
f >> v[i];
s += v[i];
maxx = max(maxx, v[i]);
}
long long st = maxx, dr = s, mij, ras = s;
while( st < dr )
{
mij = st + (dr-st)/2;
///[st, mij] [mij+1, dr]
int cnt = 0;
long long q = 0;
for( int i = 1; i <= n; ++i )
{
if( q + v[i] > mij )
++cnt, q = 0;
q += v[i];
}
++cnt;
//cout << mij << " " << cnt << "\n";
if( cnt <= k )
ras = min(mij, ras), dr = mij;
else
st = mij+1;
}
g << ras;
return 0;
}