2927. Объединяем множества

 

Объединение множеств – это очень сложно. Поэтому выведите количество чисел, которые входят хотя бы в одно из заданных множеств.

 

Вход. В первой строке задано количество множеств n (1 ≤ n ≤ 10). На следующих n строках записаны множества в формате: k a1 ... ak (1 ≤ k ≤ 1000, -109ai ≤ 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();

  }

}