https://coderun.yandex.ru/problem/krosh-and-game Средняя

Решение

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

fun main(args: Array<String>) {
    val reader = BufferedReader(InputStreamReader(System.`in`))
    val writer = BufferedWriter(OutputStreamWriter(System.out))

    val q = reader.readLine().toInt()
    val queries = IntArray(q)
    var maxN = 0
    for (i in 0 until q) {
        queries[i] = reader.readLine().toInt()
        if (queries[i] > maxN) {
            maxN = queries[i]
        }
    }

    val squares = mutableListOf<Int>()
    var i = 1
    while (i * i <= maxN) {
        squares.add(i * i)
        i++
    }

    val dp = BooleanArray(maxN + 1)
    dp[0] = false

    for (n in 1..maxN) {
        for (sq in squares) {
            if (sq > n) break
            if (!dp[n - sq]) {
                dp[n] = true
                break
            }
        }
    }

    val sb = StringBuilder()
    for (n in queries) {
        sb.append(if (dp[n]) "1" else "0").append("\\n")
    }

    writer.write(sb.toString())
    writer.flush()
    reader.close()
    writer.close()
}