Решение
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.BufferedWriter
import java.io.OutputStreamWriter
fun main() {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
// Читаем количество товаров
val n = reader.readLine().toInt()
// Создаём словарь: productId -> category
val productToCategory = mutableMapOf<Int, Int>()
repeat(n) {
val (productId, category) = reader.readLine().split(" ").map { it.toInt() }
productToCategory[productId] = category
}
// Читаем порядок товаров в списке
val order = reader.readLine().split(" ").map { it.toInt() }
// Словарь для хранения последней позиции каждой категории
val lastPosition = mutableMapOf<Int, Int>()
var minDistance = n // Изначально разнообразие равно длине списка (все категории разные)
// Проходим по порядку товаров
for (i in order.indices) {
val category = productToCategory[order[i]]!! // Получаем категорию текущего товара
if (category in lastPosition) {
// Если категория уже встречалась, вычисляем разность позиций
val distance = i - lastPosition[category]!!
minDistance = minOf(minDistance, distance) // Обновляем минимальную разность
}
lastPosition[category] = i // Обновляем последнюю позицию категории
}
// Выводим результат
writer.write(minDistance.toString())
writer.newLine()
// Закрываем потоки
reader.close()
writer.close()
}