11. Список допуска

☰ Теория

Множество HashSet<T>

Что хранит. Хранит разные значения: каждый элемент присутствует не более одного раза. Порядок элементов не гарантирован.

Для чего используют. Подходит для уникальных посетителей, списка допуска и проверки, встречался ли идентификатор раньше.

Основные операции

Запись на C#Назначение
s.Add(x)Добавить x; true, если добавлен новый элемент, иначе false.
s.Contains(x)Проверить наличие x.
s.Remove(x)Удалить x; false, если элемента не было.
s.CountЧисло разных элементов.
foreach (int x in s)Перебрать элементы без гарантии порядка.

Пример

Для примера нужны using System; и using System.Collections.Generic;. Код выполняется внутри Main.

HashSet<int> ids = new HashSet<int>();
ids.Add(7);
ids.Add(9);
ids.Add(7);                    // Повтор не создаёт новый элемент.
Console.WriteLine(ids.Count);
Console.WriteLine(ids.Contains(9));
ids.Remove(9);
Console.WriteLine(ids.Contains(9));

Вывод:

2
True
False

Важно. Множество не хранит количество повторений и не предоставляет доступ по индексу. Для вывода по возрастанию создайте List<int> из множества и вызовите Sort().

Для этой задачи

  • Результат операции. Возвращаемые значения Add и Remove позволяют отличить реальное изменение от повторной команды.

Система хранит идентификаторы пользователей, которым разрешён доступ. Изначально список допуска пуст. Повторное добавление не создаёт копию пользователя. Удаление отсутствующего пользователя не меняет состояние.

Команды

КомандаДействие и ответ
ADD idДобавить допуск: ADDED; если уже был: EXISTS.
REMOVE idУдалить допуск: REMOVED; если его не было: MISSING.
HAS idПроверить допуск: YES или NO.
COUNTВывести число пользователей с допуском.

Входные данные

Первая строка содержит q. Затем идут q команд, по одной в строке.

Выходные данные

Для каждой команды выведите ответ из таблицы.

Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.

Ограничения

1 ≤ q ≤ 100000; идентификатор id от 1 до 10⁹.

Примеры
Входные данныеВыходные данные
1
9
ADD 10
ADD 10
COUNT
HAS 10
REMOVE 10
REMOVE 10
HAS 10
COUNT
ADD 10
ADDED
EXISTS
1
YES
REMOVED
MISSING
NO
0
ADDED
2
4
HAS 7
REMOVE 7
ADD 7
HAS 7
NO
MISSING
ADDED
YES

Напишите программу
Auto
       

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам