Pagini recente » Cod sursa (job #3318268) | Cod sursa (job #1840124) | Cod sursa (job #1688787) | Cod sursa (job #1244377) | Cod sursa (job #3318198)
#include <bits/stdc++.h>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
typedef long long ll;
const int nMax = 16e3;
ll n, k, v[nMax + 5];
/**6 3
7
3
2
3
1
4*/
bool incape(ll capacitate)
{
ll nr_drumuri = 1;
ll catAvem = 0;
for(int i=1; i<=n; i++)
{
if(catAvem + v[i] <= capacitate)
{
catAvem += v[i];
}
else
{
nr_drumuri++;
catAvem = v[i];
if(nr_drumuri > k)
return false;
}
}
return true;
}
ll cautamCapacitate(ll st, ll dr)
{
ll res = -1;
while(st <= dr)
{
ll mid = st + (dr-st)/2;
if(incape(mid))
{
res = mid;
dr = mid -1;
}
else
st = mid + 1;
}
return res;
}
int main()
{
ll maximDinSir = LONG_LONG_MIN;
ll suma = 0;
f >> n >> k;
for(int i=1; i<=n; i++)
f >> v[i],
maximDinSir = max(maximDinSir, v[i]),
suma += v[i];
g << cautamCapacitate(maximDinSir, suma);
}