Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачу на Python 3.8 (можно и на других языках)

Евгений ueksq Ученик (116), на голосовании 1 год назад
Однажды Дмитрий шёл по набережной и решил сделать несколько панорамных фотографий подряд стоящих вдоль неё домов. Взглянув на получившиеся кадры, он заметил, что распределение высот домов ведёт себя странным образом. Чтобы убедиться в этом, Дмитрий решил численно оценить асимметрию распределения высот на каждой фотографии.

Помогите ему решить эту задачу. Асимметрию множества чисел {hl , . . . , hr } стоит вычислять по формуле: Замечание
В примере μ = 3.8, а σ2 = 6.16.

Формат входных данных
Первая строка содержит единственное натуральное число N (1≤ N ≤ 105) — число домов на набережной.

Вторая строка содержит N натуральных чисел hi (1≤ hi ≤ 103) — высота i-го дома. Дома пронумерованы подряд от 1 до n. Гарантируется, что любые два соседних дома имеют разную высоту.

Третья строка содержит единственное натуральное число Q (1≤ N ≤ 105) — число фотографий, сделанных Дмитрием.

Следующие Q строк содержат описания соответствующих фотографий: два разделённых пробелом натуральных числа lt и rt (1≤ lt < rt ≤ n) — номера левого и правого дома на t-й фотографии.
Формат выходных данных
Выведите Q вещественных чисел с плавающей точкой: результаты оценки соответствующих фотографий.

Ответ считается верным, если его абсолютная или относительная погрешность не превышает 10-6.

Пример 1
Входные данные:
5
1 2 3 5 8
2
1 5
​​​​​​​1 3
Выходные данные:
0.621634857962435
0.0
Голосование за лучший ответ
Dmitry Просветленный (22823) 1 год назад
 n = int(input())
h = list(map(int, input().split()))
h_partial_sums = [0] * (n + 1)
h_squares_partial_sums = [0] * (n + 1)
h_cubes_partial_sums = [0] * (n + 1)

for i in range(n):
h_partial_sums[i + 1] = h_partial_sums[i] + h[i]
item = h[i] * h[i]
h_squares_partial_sums[i + 1] = h_squares_partial_sums[i] + item
item *= h[i]
h_cubes_partial_sums[i + 1] = h_cubes_partial_sums[i] + item

for _ in range(int(input())):
l, r = map(int, input().split())
num_items = r - l + 1
mu = (h_partial_sums[r] - h_partial_sums[l - 1]) / num_items
h2 = h_squares_partial_sums[r] - h_squares_partial_sums[l - 1]
d = h2 / num_items - mu * mu
h3 = h_cubes_partial_sums[r] - h_cubes_partial_sums[l - 1]
a = d ** (-1.5) * ((h3 - 3 * mu * h2) / num_items + 2 * mu * mu * mu)
print(a)
Похожие вопросы