https://coderun.yandex.ru/problem/fortune-wheel Сложная

Решение

import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.util.Locale
import kotlin.math.abs

fun solveLinearSystem(a: Array<DoubleArray>, b: DoubleArray): DoubleArray? {
    val n = b.size
    val augmentedMatrix = Array(n) { DoubleArray(n + 1) }
    for (i in 0 until n) {
        System.arraycopy(a[i], 0, augmentedMatrix[i], 0, n)
        augmentedMatrix[i][n] = b[i]
    }

    for (i in 0 until n) {
        var pivot = i
        for (k in i + 1 until n) {
            if (abs(augmentedMatrix[k][i]) > abs(augmentedMatrix[pivot][i])) {
                pivot = k
            }
        }
        val tempRow = augmentedMatrix[i]
        augmentedMatrix[i] = augmentedMatrix[pivot]
        augmentedMatrix[pivot] = tempRow

        if (abs(augmentedMatrix[i][i]) < 1e-12) return null

        for (k in i + 1 until n) {
            val factor = augmentedMatrix[k][i] / augmentedMatrix[i][i]
            augmentedMatrix[k][i] = 0.0
            for (j in i + 1..n) {
                augmentedMatrix[k][j] -= factor * augmentedMatrix[i][j]
            }
        }
    }

    val x = DoubleArray(n)
    for (i in n - 1 downTo 0) {
        var sum = 0.0
        for (j in i + 1 until n) {
            sum += augmentedMatrix[i][j] * x[j]
        }
        if (abs(augmentedMatrix[i][i]) < 1e-12) return null
        x[i] = (augmentedMatrix[i][n] - sum) / augmentedMatrix[i][i]
    }

    return x
}

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

    val b = reader.readLine().toInt()
    val n = 2 * b - 1

    val probs = DoubleArray(19)
    for (k in -9..9) {
        probs[k + 9] = (10.0 - abs(k)) / 100.0
    }

    val matrixM = Array(n) { DoubleArray(n) }
    val vectorB = DoubleArray(n) { 1.0 }

    for (i in 0 until n) {
        for (j in 0 until n) {
            val k = j - i
            if (i == j) {
                matrixM[i][i] = 1.0 - probs[9]
            } else {
                if (k in -9..9) {
                    matrixM[i][j] = -probs[k + 9]
                } else {
                    matrixM[i][j] = 0.0
                }
            }
        }
    }

    val solutionE = solveLinearSystem(matrixM, vectorB)

    if (solutionE != null) {
        val targetIndex = b - 1
        if (targetIndex in 0 until n) {
            val expectedValue = solutionE[targetIndex]
            writer.write(String.format(Locale.US, "%.10f", expectedValue))
            writer.newLine()
        } else {
            writer.write("Error: Calculated target index is out of bounds.")
            writer.newLine()
        }
    } else {
        writer.write("Error: The linear system could not be solved.")
        writer.newLine()
    }

    writer.flush()
    reader.close()
    writer.close()
}