Разброс на конвейере
Условие
На школьной экскурсии вы смотрите на конвейер: робот собирает детали, а на табло по очереди появляются времена сборки (в секундах). Мастеру важно понять, насколько «гуляют» времена относительно среднего.
Числа приходят потоком, заранее неизвестно, сколько их будет. Как только на табло появится 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}}\).
Формат ввода:
- Вводятся целые числа \(x\) по одному в строке.
- Каждое \(x\) либо от 1 до 1000, либо равно 0.
- Число 0 означает конец ввода и не входит в набор.
Формат вывода:
- Выведите одно число — среднеквадратичное отклонение.
- Печать строго с 6 знаками после запятой (формат "%.6f").
- Если чисел не было (сразу пришёл 0), выведите 0.000000.
Ограничения:
- Поток может быть длинным, хранить все числа нельзя.
- Память O(1): используйте только скалярные переменные.
- Импортировать модуль math можно только ради sqrt.
Пример: Ввод:
1
5
0
Вывод:
2.000000Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- БВИ и льготы при поступлении — какой диплом что даёт и сколько лет он действует
- Перечневые олимпиады по информатике — олимпиады перечня Минобрнауки, их уровни и что нужно к диплому