Разброс на конвейере

тема: Поток без массивов · уровень: средний

Условие

На школьной экскурсии вы смотрите на конвейер: робот собирает детали, а на табло по очереди появляются времена сборки (в секундах). Мастеру важно понять, насколько «гуляют» времена относительно среднего.

Числа приходят потоком, заранее неизвестно, сколько их будет. Как только на табло появится 0 — смена закончилась (сам 0 не является временем).

Важно: в этой задаче нельзя использовать массивы/списки и вообще хранить все времена. Решение должно быть в один проход и на O(1) памяти — только несколько переменных.

Нужно вывести среднеквадратичное отклонение (популяционное): \[ \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\mu)^2} \] , где \(\mu\) — среднее, а деление идёт на \(n\) (не на \(n-1\)).

Подсказка-идея: чтобы обойтись одним проходом, можно выразить дисперсию через суммы \(\sum x\) и \(\sum x^2\): \[ \mathrm{var} = \frac{\sum x^2}{n} - \left(\frac{\sum x}{n}\right)^2 \] , \(\sigma = \sqrt{\mathrm{var}}\).

Формат ввода:

Формат вывода:

Ограничения:

Пример: Ввод:

1
5
0

Вывод:

2.000000

Решить задачу с автопроверкой на Python →

Куда дальше