#include <algorithm>
#include <iostream>
#include <limits.h>
#include <vector>
using
namespace
std;
#define ull unsigned long long
ull calculate(vector<ull> cars, ull F, ull pos)
{
ull cost = 0;
for
(ull i = 0; i < cars.size(); ++i)
cost +=
abs
((
long
long
)cars[i]
- (
long
long
)(pos + i * F));
return
cost;
}
ull getMinPetrol(vector<ull> cars, ull N, ull F, ull start,
ull end, ull minimum = -1)
{
if
(start > end)
return
minimum;
ull mid = (start + end) / 2;
ull count = calculate(cars, F, mid);
ull count2 = calculate(cars, F, mid + 1);
if
(count == -1) {
end = mid - 1;
return
getMinPetrol(cars, N, F, start, end,
minimum);
}
if
(count < minimum)
minimum = count;
if
(count2 > count)
end = mid - 1;
else
start = mid + 1;
return
getMinPetrol(cars, N, F, start, end, minimum);
}
int
main()
{
ull N = 3, F = 4, A = 11, B = 23;
vector<ull> cars = { 10, 11, 30 };
ull end = B - N * F;
cout << getMinPetrol(cars, N, F, A, end) <<
"\n"
;
N = 3, F = 6, A = 10, B = 30;
vector<ull> cars2 = { 10, 20, 30 };
end = B - N * F;
cout << getMinPetrol(cars2, N, F, A, end) <<
"\n"
;
}