Pagini recente » Istoria paginii utilizator/scobanalin | Diferente pentru problema/domino2 intre reviziile 4 si 3 | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2953212)
#include <fstream>
#include <vector>
#define int long long
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int n, k;
vector<int> v;
bool check(int m)
{
int s = 0, t = 0;
for (int i = 1; i <= n; i ++)
{
if (s + v[i] <= m)
{
s += v[i];
}
else
{
t ++;
s = v[i];
}
}
if (s > 0) t ++;
return t <= k;
}
int32_t main()
{
cin >> n >> k;
v.resize(n + 1);
for (int i = 1; i <= n; i ++)
{
cin >> v[i];
}
int l = 0, h = 256000000;
int ans = 0;
while (l < h)
{
int mid = (l + h) / 2;
if (check(mid))
{
h = mid;
ans = mid;
//cout << "*";
}
else
{
l = mid + 1;
}
//cout << '\n';
}
cout << ans << '\n';
}