https://coderun.yandex.ru/problem/polyglots/description Легкая

Условие

Каждый из N школьников некоторой школы знает Mᵢ языков. Определите, какие языки знают все школьники и языки, которые знает хотя бы один из школьников.

Примеры

Ввод: 3 3 Russian English Japanese 2 Russian English 1 English Вывод: 1 English 3 Russian Japanese English

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))
    
    val n = reader.readLine().toInt()
    
    // Множество языков каждого школьника
    val studentLanguages = Array(n) { mutableSetOf<String>() }
    
    // Заполняем языки для каждого школьника
    for (i in 0 until n) {
        val m = reader.readLine().toInt()
        repeat(m) {
            val lang = reader.readLine()
            studentLanguages[i].add(lang)
        }
    }
    
    // Языки, которые знают все (пересечение)
    val allKnow = if (n == 1) {
        studentLanguages[0]
    } else {
        var result = studentLanguages[0].toMutableSet()
        for (i in 1 until n) {
            result.retainAll(studentLanguages[i])
        }
        result
    }
    
    // Языки, которые знает хотя бы один (объединение)
    val anyKnow = mutableSetOf<String>()
    for (i in 0 until n) {
        anyKnow.addAll(studentLanguages[i])
    }
    
    // Выводим языки, которые знают все
    writer.write("${allKnow.size}\\n")
    for (lang in allKnow.sorted()) {
        writer.write("$lang\\n")
    }
    
    // Выводим языки, которые знает хотя бы один
    writer.write("${anyKnow.size}\\n")
    for (lang in anyKnow.sorted()) {
        writer.write("$lang\\n")
    }
    
    reader.close()
    writer.close()
}