https://coderun.yandex.ru/problem/control-work/description Легкая

Условие

Петя и Вася — одноклассники и лучшие друзья, поэтому они во всём помогают друг другу. Завтра у них контрольная по математике, и учитель подготовил целых K вариантов заданий.

В классе стоит один ряд парт, за каждой из них (кроме, возможно, последней) на контрольной будут сидеть ровно два ученика. Ученики знают, что варианты будут раздаваться строго по порядку: правый относительно учителя ученик первой парты получит вариант 1, левый — вариант 2, правый ученик второй парты получит вариант 3 (если число вариантов больше двух) и т.д. Так как K может быть меньше чем число учеников N, то после варианта K снова выдаётся вариант 1. На последней парте в случае нечётного числа учеников используется только место 1.

Петя самым первым вошёл в класс и сел на своё любимое место. Вася вошёл следом и хочет получить такой же вариант, что и Петя, при этом сидя к нему как можно ближе. То есть между ними должно оказаться как можно меньше парт, а при наличии двух таких мест с равным расстоянием от Пети Вася сядет позади Пети, а не перед ним. Напишите программу, которая подскажет Васе, какой ряд и какое место (справа или слева от учителя) ему следует выбрать. Если же один и тот же вариант Вася с Петей писать не смогут, то выдайте одно число  - 1.

Примеры

Ввод: 25 2 1 2 Вывод: 2 2

Ввод: 25 13 7 1 Вывод: -1

Решение

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

// Функция для вычисления позиции ученика в общем порядке раздачи вариантов
fun getPosition(row: Int, place: Int): Int {
    return (row - 1) * 2 + if (place == 1) 0 else 1
}

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

    // Читаем входные данные
    val n = reader.readLine().toInt()
    val k = reader.readLine().toInt()
    val petyaRow = reader.readLine().toInt()
    val petyaPlace = reader.readLine().toInt()

    // Позиция Пети
    val petyaPos = getPosition(petyaRow, petyaPlace)
    val petyaVariant = petyaPos % k + 1

    // Вычисляем ближайшие позиции с тем же вариантом
    var vasyaPos = -1
    var vasyaRow = -1
    var vasyaPlace = -1
    var minDistance = Int.MAX_VALUE

    // Проверяем позицию после Пети
    val nextPos = petyaPos + k
    if (nextPos < n) {
        val row = nextPos / 2 + 1
        val place = if (nextPos % 2 == 0) 1 else 2
        val distance = kotlin.math.abs(row - petyaRow)
        if (distance < minDistance) {
            minDistance = distance
            vasyaPos = nextPos
            vasyaRow = row
            vasyaPlace = place
        }
    }

    // Проверяем позицию перед Петей
    val prevPos = petyaPos - k
    if (prevPos >= 0) {
        val row = prevPos / 2 + 1
        val place = if (prevPos % 2 == 0) 1 else 2
        val distance = kotlin.math.abs(row - petyaRow)
        if (distance < minDistance || (distance == minDistance && row > petyaRow)) {
            minDistance = distance
            vasyaPos = prevPos
            vasyaRow = row
            vasyaPlace = place
        }
    }

    // Вывод результата
    if (vasyaPos == -1) {
        writer.write("-1")
    } else {
        writer.write("$vasyaRow $vasyaPlace")
    }
    
    writer.flush()
    reader.close()
    writer.close()
}