Редакция для Среднее арифметическое
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно найти обычное среднее арифметическое температур.
Если температуры равны t_1, t_2, ..., t_n, то ответ — это сумма всех температур, делённая на число дней n.
Значит, задача сводится к двум действиям:
- посчитать сумму всех чисел;
- разделить её на
n.
2. Наблюдения
- Все температуры — целые числа, но среднее арифметическое может быть дробным, поэтому ответ нужно выводить как вещественное число.
- По условию допускается погрешность
1e-6, значит достаточно вывести, например, 6 знаков после запятой. - Значения температур могут быть большими: до
10^9по модулю. - Количество дней может быть до
2 * 10^5, поэтому сумма по модулю может достигать примерно2 * 10^14. - Такой результат не поместится в тип
int, поэтому в C++ нужно использоватьlong long.
3. Алгоритм
- Считать число
n. - Создать переменную
sumи изначально сделать её равной0. - Считать все
nтемператур и прибавить их кsum. - Вычислить
average = sum / n. - Вывести
averageс точностью 6 знаков после запятой.
4. Почему это работает
По определению среднее арифметическое набора чисел равно:
- сумме всех чисел,
- делённой на их количество.
Алгоритм как раз и делает это напрямую:
- накапливает сумму всех температур;
- делит полученную сумму на число дней
n.
Следовательно, результат алгоритма в точности равен средней температуре за весь период наблюдений.
5. Сложность
Пусть дано n температур.
- Время работы:
O(n), потому что каждое число обрабатывается один раз. - Дополнительная память:
O(1)в C++, так как храним только сумму и текущий элемент.
В Python в эталонном решении используется список, поэтому дополнительная память равна O(n).
6. Код на C++17
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
long long sum = 0;
for (int i = 0; i < n; i++) {
long long x;
cin >> x;
sum += x;
}
double average = (double)sum / n;
cout << fixed << setprecision(6) << average << '\n';
return 0;
}
7. Код на Python 3
n = int(input())
a = list(map(int, input().split()))
s = sum(a)
print(f"{s / n:.6f}")
Комментарии