https://coderun.yandex.ru/problem/cup-cowcake-throwing/description Легкая

Условие

Ежегодный турнир «Веселый коровяк» — по метанию коровьих лепешек на дальность — прошёл 8–9 июля в селе Крылово Осинского района Пермского края.

Участники соревнований кидают «снаряд» — спрессованный навоз, выбирая его из заранее заготовленной кучи. Желающих поупражняться в силе броска традиционно очень много — как мужчин, так и женщин. Каждую лепешку, которую метнули участники «Веселого коровяка», внимательно осматривали женщины в костюмах коров и тщательно замеряли расстояние.

Соревнования по метанию коровьих лепешек проводятся в Пермском крае с 2009 года.

К сожалению, после чемпионата потерялись записи с фамилиями участников, остались только записи о длине броска в том порядке, в котором их совершали участники.

Тракторист Василий помнит три факта:

  1. Число метров, на которое он метнул лепешку, оканчивалось на 5

  2. Один из победителей чемпионата метал лепешку до Василия

  3. Участник, метавший лепешку сразу после Василия, метнул ее на меньшее количество метров

Будем считать, что участник соревнования занял k-е место, если ровно (k − 1) участников чемпионата метнули лепешку строго дальше, чем он.

Какое максимально высокое место мог занять Василий?

Примеры

Ввод: 7 10 20 15 10 30 5 1 Вывод: 6

Ввод: 3 15 15 10 Вывод: 1

Ввод: 3 10 15 20 Вывод: 0

Решение

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

private fun cupCowcakeThrowing(results: List<Int>): Int {
    val max = results.max() // Находим максимальное значение в списке
    val maxIndex = results.indexOf(max) // Определяем индекс максимального элемента
    if (maxIndex == results.lastIndex) return 0 // Если максимум в конце, результата нет

    // Ищем максимальное число, оканчивающееся на 5, перед которым большее число
    val maxCandidate = results.subList(maxIndex + 1, results.lastIndex)
        .filterIndexed { index, result -> result % 10 == 5 && results[index + maxIndex + 2] < result }
        .maxOrNull() ?: return 0 // Если не найдено подходящее число, возвращаем 0

    return results.sortedDescending().indexOf(maxCandidate) + 1 // Возвращаем позицию в отсортированном списке
}

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

    reader.readLine() // Читаем и игнорируем первую строку (количество элементов)
    val results = reader.readLine().split(" ").map { it.toInt() } // Читаем список чисел

    writer.write(cupCowcakeThrowing(results).toString()) // Записываем результат
    writer.newLine()
    writer.flush()

    reader.close()
    writer.close()
}