https://coderun.yandex.ru/problem/team-contest Средняя

Решение

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

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

    val n = reader.readLine().toInt()
    val a = Array(3) { LongArray(n + 1) }
    repeat(3) { i ->
        val st = StringTokenizer(reader.readLine())
        for (j in 1..n) {
            a[i][j] = a[i][j - 1] + st.nextToken().toLong()
        }
    }

    var answer = Long.MAX_VALUE
    val perms = listOf(
        Triple(0, 1, 2),
        Triple(0, 2, 1),
        Triple(1, 0, 2),
        Triple(1, 2, 0),
        Triple(2, 0, 1),
        Triple(2, 1, 0)
    )

    for ((p1, p2, p3) in perms) {
        val pref1 = a[p1]
        val pref2 = a[p2]
        val pref3 = a[p3]
        var mnF = pref1[1] - pref2[1]
        var bestMid = Long.MAX_VALUE

        for (j in 2 until n) {
            val candidate = mnF + (pref2[j] - pref3[j])
            if (candidate < bestMid) bestMid = candidate
            val fAtJ = pref1[j] - pref2[j]
            if (fAtJ < mnF) mnF = fAtJ
        }
        val total = bestMid + pref3[n]
        if (total < answer) answer = total
    }

    writer.write(answer.toString())
    writer.newLine()
    writer.flush()
}