В гонках, в которых гонщики проходят хотя бы один поворот изогнутой трассы, стартовые позиции для каждого гонщика смещены, так что каждый гонщик проходит одинаковое расстояние вокруг трассы (в противном случае гонщик во внутренней полосе движения имел бы огромное преимущество ).
Учитывая длину главной и вспомогательной осей (или полу-большой и полу-минорный, если вы предпочитаете) эллиптической дорожки и количество дорожек в дорожке, выведите расстояния от начальной точки самой внутренней полосы, по которой каждая дорожка должен быть в шахматном порядке.
Характеристики
- Каждая полоса представляет собой эллипс с полуголовыми осями на 5 единиц длиннее, чем следующая, самая короткая полоса. Для простоты предположим, что дорожки имеют ширину 0.
- Самая внутренняя полоса движения всегда начинается с 0, а каждая другая начальная точка является положительным целым числом, большим или равным предыдущей начальной точке.
- Ввод и вывод могут быть в любом удобном и разумном формате.
- Входные данные всегда будут целыми числами.
- Вы должны рассчитать окружность дорожки с точностью до 0,01 единицы от фактического значения.
- Выходы должны быть округлены до ближайшего целого числа (с плавающей точкой).
- Финишная черта является отправной точкой для самого внутреннего гонщика. В гонке только один круг.
- Длина осей измеряется с использованием самой внутренней полосы дорожки.
- Вывод 0 для смещения самой внутренней полосы не является обязательным.
Тестовые случаи
Формат: a, b, n -> <list of offsets, excluding innermost lane>
20, 10, 5 -> 30, 61, 92, 124
5, 5, 2 -> 31
15, 40, 7 -> 29, 60, 91, 121, 152, 183
35, 40, 4 -> 31, 62, 94
Эти тестовые случаи были сгенерированы с помощью следующего скрипта Python 3, который использует аппроксимацию окружности эллипса, разработанного Рамануджаном:
#!/usr/bin/env python3
import math
a = 35 # semi-major axis
b = 40 # semi-minor axis
n = 4 # number of lanes
w = 5 # spacing between lanes (constant)
h = lambda a,b:(a-b)**2/(a+b)**2
lane_lengths = [math.pi*(a+b+w*i*2)*(1+3*h(a+w*i,b+w*i)/(10+math.sqrt(4-3*h(a+w*i,b+w*i)))) for i in range(n)]
print("{}, {}, {} -> {}".format(a, b, n, ', '.join([str(int(x-lane_lengths[0])) for x in lane_lengths[1:]])))
Используемое приближение:
Наконец, вот полезная диаграмма для понимания расчетов смещений:
h**5
, который значительно ниже 0.01
для широкого диапазона значений.