Условие
Реализуйте класс RecentMeasurements, который хранит не более capacity последних целочисленных измерений в кольцевом буфере. Конструктор задаёт вместимость; исходно буфер пуст. Метод void add(int value) добавляет измерение, а при заполненном буфере заменяет самое старое. Новое значение становится самым свежим.
Предусмотрите методы int size() const, int get(int index) const и double average() const. Метод get использует логические индексы с нуля: 0 соответствует самому старому сохранённому измерению. Он вызывается только с допустимым индексом. Среднее вычисляйте по всем сохранённым измерениям; на пустом буфере average() возвращает 0.0.
Используйте закрытый массив вместимости 1000 и кольцевую индексацию; готовые контейнеры и сдвиг всех элементов при добавлении запрещены. После каждого нового измерения выведите количество сохранённых значений и среднее. В конце выведите содержимое буфера от старого к новому.
Ограничения
Время: 2 секунды. Память: 64 МиБ. Вывод: до 2 МиБ. Язык: C++17.
Входные данные
В первой строке вводятся capacity и N. Во второй — N целых измерений. Ограничения: 1 ≤ capacity ≤ 1000, 1 ≤ N ≤ 10000, −10⁶ ≤ value ≤ 10⁶.
Выходные данные
После каждого добавления выведите отдельную строку: текущий размер и среднее с шестью знаками после десятичной точки через пробел. В последней строке выведите все сохранённые измерения через пробел в порядке от старого к новому.
Примеры
3 5 10 20 30 40 50
1 10.000000 2 15.000000 3 20.000000 3 30.000000 3 40.000000 30 40 50
1 3 -5 0 7
1 -5.000000 1 0.000000 1 7.000000 7
4 2 1 2
1 1.000000 2 1.500000 1 2