12. Сравнение подписок пользователей
Множество 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().
Для этой задачи
- Пересечение A и B. Элементы, которые есть и в A, и в B.
- Разность A и B. Элементы A, которых нет в B. Порядок A и B важен.
- Объединение. Все элементы A и B без повторов. Операции можно реализовать через foreach, Contains и Add.
Даны списки тем, на которые подписаны два пользователя. Из-за повторной синхронизации в списках могут быть дубликаты. Для сравнения учитывайте каждую тему только один раз. Найдите общие темы, темы только первого пользователя, темы только второго и все темы обоих пользователей.
Входные данные
Первая строка содержит n и m. Вторая — n идентификаторов тем первого пользователя. Третья — m идентификаторов второго. При нулевой длине соответствующая строка пустая.
Выходные данные
Выведите ровно четыре строки: 1) общие темы; 2) темы только первого; 3) темы только второго; 4) все темы. В каждой строке идентификаторы должны идти строго по возрастанию, без повторов, через пробел. Если набор пуст, выведите EMPTY.
Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.
Ограничения
0 ≤ n, m ≤ 100000; идентификаторы от 1 до 10⁹.
| № | Входные данные | Выходные данные |
|
1
|
5 4
3 1 3 8 5
5 2 3 2
|
3 5
1 8
2
1 2 3 5 8
|
|
2
|
0 3
4 4 4
|
EMPTY
EMPTY
4
4
|
Напишите программу
Auto