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
       

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

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