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()
}