Pagini recente » Cod sursa (job #814039) | Cod sursa (job #1906278) | Cod sursa (job #130719) | Cod sursa (job #3273079) | Cod sursa (job #1041752)
#include<fstream>
using namespace std;
ifstream f ("transport.in");
ofstream g ("transport.out");
short *a, n, k, step_init;
bool depaseste (int val)
{
if (val < a[0])
return true;
short i = 0, step, drumuri = 0, sum = 0;
while (i < n - 1 && drumuri <= k)
{
step = step_init;
for (i = 0; step; step >>= 1)
if (i + step < n && a[i + step] - sum <= val)
i += step;
drumuri++;
sum = a[i];
}
if (drumuri <= k)
return false;
else
return true;
}
int main ()
{
short lim_s = 0, lim_d, capacitate, m;
f >> n >> k;
a = new short[n];
f >> a[0];
for (short i = 1; i < n; i++)
{
f >> a[i];
a[i] += a[i - 1];
}
for (step_init = 1; step_init < n; step_init <<= 1);
capacitate = lim_d = a[n - 1];
while (lim_s < lim_d - 1)
{
m = (lim_d + lim_s) / 2;
if (!depaseste(m))
{
capacitate = m;
lim_d >>= 1;
}
else
{
lim_s = m;
lim_d = capacitate;
}
}
g << capacitate;
return 0;
}