Объединение
множеств – это очень сложно. Поэтому выведите количество чисел, которые входят
хотя бы в одно из заданных множеств.
Вход. В первой строке
задано количество множеств n (1
≤ n ≤ 10). На следующих n строках записаны множества в формате: k a1
... ak (1 ≤ k ≤ 1000, -109 ≤ ai ≤ 109).
Выход. Выведите
количество чисел, которые входят хотя бы в одно из заданных множеств.
Пример входа |
Пример выхода |
2 3 1 2
3 3 2 4
3 |
4 |
РЕШЕНИЕ
структуры данных - set
Анализ алгоритма
Занесем все
числа в одно множество set. Повторения всех чисел уничтожатся. Затем выведем
размер полученного множества.
Реализация алгоритма
Объявим
множество s.
set<int> s;
Читаем
количество множеств n.
scanf("%d", &n);
for(i = 0; i < n; i++)
{
Читаем данные очередного множества: k – его размер и далее в цикле числа самого множества. Заносим все
числа в s.
scanf("%d",
&k);
for(j = 0; j
< k; j++)
{
scanf("%d",
&x);
s.insert(x);
}
}
Выводим ответ – размер полученного множества.
printf("%d\n", s.size());
Java реализация
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
TreeSet<Integer> s = new
TreeSet<Integer>();
int n = con.nextInt();
for(int i = 0; i < n; i++)
{
int k = con.nextInt();
for(int j = 0; j < k; j++)
{
int x = con.nextInt();
s.add(x);
}
}
System.out.println(s.size());
con.close();
}
}