Pagini recente » Cod sursa (job #1842052) | Cod sursa (job #1887193) | Cod sursa (job #1929187) | Cod sursa (job #63444) | Cod sursa (job #1041757)
#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 && i == n - 1)
return false;
else
return true;
}
int main ()
{
short lim_s = 0, lim_d, m;
f >> n >> k;
a = new short[n];
f >> a[0];
for (short i = 1; i < n; i++)
{
f >> a[i];
if (a[i] > lim_s)
lim_s = a[i];
a[i] += a[i - 1];
}
for (step_init = 1; step_init < n; step_init <<= 1);
lim_d = a[n - 1];
while (lim_s != lim_d)
{
m = (lim_d + lim_s) / 2;
if (!depaseste(m))
lim_d = m;
else
lim_s = m + 1;
}
g << lim_d;
return 0;
}