https://coderun.yandex.ru/problem/closet_play Сложная

Решение

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

fun main() {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = PrintWriter(BufferedWriter(OutputStreamWriter(System.out)))

    val k = reader.readLine().toInt()
    val s = reader.readLine()
    val t = reader.readLine()

    if (k > s.length || k > t.length) {
        writer.println("NO")
        writer.flush()
        return
    }

    val ft = IntArray(26)
    for (ch in t) {
        ft[ch - 'a']++
    }

    val fw = IntArray(26)
    for (i in 0 until k) {
        fw[s[i] - 'a']++
    }

    fun windowIsValid(): Boolean {
        for (c in 0 until 26) {
            if (fw[c] > ft[c]) return false
        }
        return true
    }

    if (windowIsValid()) {
        writer.println("YES")
        writer.flush()
        return
    }

    for (i in k until s.length) {
        fw[s[i] - 'a']++
        fw[s[i - k] - 'a']--
        if (windowIsValid()) {
            writer.println("YES")
            writer.flush()
            return
        }
    }

    writer.println("NO")
    writer.flush()
}