Pagini recente » Monitorul de evaluare | Cod sursa (job #725674) | Cod sursa (job #1158569) | Cod sursa (job #773001) | Cod sursa (job #3325086)
#include <bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int N;
int K;
vector<int> v;
bool ok(long long C)
{
int curse = 1;
long long s = 0;
for(int i = 0; i < N; i++)
{
if(v[i] > C)
{
return false;
}
if(s + v[i] <= C)
{
s += v[i];
}
else
{
curse++;
s = v[i];
if(curse > K)
{
return false;
}
}
}
return true;
}
int main()
{
f >> N >> K;
v.assign(N, 0);
long long sum = 0;
int mx = 0;
for(int i = 0; i < N; i++)
{
f >> v[i];
sum += v[i];
if(v[i] > mx)
{
mx = v[i];
}
}
long long st = mx;
long long dr = sum;
long long ans = sum;
while(st <= dr)
{
long long mid = (st + dr) / 2;
if(ok(mid))
{
ans = mid;
dr = mid - 1;
}
else
{
st = mid + 1;
}
}
g << ans;
}