Mai intai trebuie sa te autentifici.
Cod sursa(job #3041639)
Utilizator | Data | 31 martie 2023 21:17:19 | |
---|---|---|---|
Problema | Transport | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.24 kb |
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
vector < int > v;
int main()
{
v.resize(16001);
int n, k, sum = 0;
cin >> n >> k;
for(int i = 1; i <= n; i++)
{
cin >> v[i];
sum += v[i];
}
int st = 1, dr = sum, ans = -1, c = 0;
while(st <= dr)
{
int m = (st + dr) / 2;
bool ok = true;
int c = 0, s = 0;
for(int i = 1; i <= n; i++)
{
s += v[i];
if(s == m)
{
s = 0;
c++;
}
else if(s > m)
{
c++;
s = v[i];
}
if(i == n && s < m)
{
c++;
}
if(v[i] > m)
{
ok = false;
}
}
if(ok == true)
{
if(c > k)
{
st = m + 1;
}
else
{
ans = m;
dr = m - 1;
}
}
else
{
st = m + 1;
}
}
cout << ans;
return 0;
}