Для решения задачи можно использовать стек, чтобы отслеживать последовательности одинаковых оценок. Алгоритм будет работать следующим образом:
1. Инициализируем стек, который будет хранить пары (оценка, количество повторений).
2. Проходим по массиву оценок:
- Если текущая оценка совпадает с вершиной стека, увеличиваем количество повторений.
- Если текущая оценка не совпадает с вершиной стека, добавляем новую пару в стек.
- Если количество повторений на вершине стека достигает 3, удаляем эту пару из стека и увеличиваем счетчик удаленных оценок.
3. Повторяем процесс, пока не пройдемся по всем оценкам.
4. Выводим количество удаленных оценок.
Вот пример кода на C++:
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> ratings(n);
for (int i = 0; i < n; ++i) {
cin >> ratings[i];
}
stack<pair<int, int>> st;
int deleted = 0;
for (int i = 0; i < n; ++i) {
if (!st.empty() &&
st.top ().first == ratings[i]) {
st.top ().second++;
} else {
st.push({ratings[i], 1});
}
if (
st.top ().second >= 3) {
deleted +=
st.top ().second;
st.pop();
}
}
cout << deleted << endl;
return 0;
}
### Объяснение:
1. Ввод данных:
- Считываем количество оценок n.
- Считываем сами оценки в вектор ratings.
2. Инициализация стека и счетчика удаленных оценок:
- Создаем стек st, который будет хранить пары (оценка, количество повторений).
- Инициализируем переменную deleted для подсчета удаленных оценок.
3. Проход по оценкам:
- Для каждой оценки проверяем, совпадает ли она с вершиной стека.
- Если совпадает, увеличиваем количество повторений вершины стека.
- Если не совпадает, добавляем новую пару (оценка, 1) в стек.
- Если количество повторений на вершине стека достигает 3, удаляем эту пару и увеличиваем счетчик удаленных оценок.
4. Вывод результата:
- Выводим количество удаленных оценок.
Этот алгоритм работает эффективно и корректно обрабатывает все предусмотренные случаи.
Напишите программу, которая по данной последовательности определяет, сколько оценок будет удалено. Непрерывных цепочек из трех и более одинаковых оценок в начальный момент может быть не более одной.
Формат ввода
Сначала вводится количество оценок в последовательности (не более 1000) и далее сами оценки (от 0 до 9).
Формат вывода
Требуется вывести количество оценок, которое будет "стёрто".
Пример
Ввод Вывод
5 1 3 3 3 2
3