Разбор задачи "Строки в книге"
Первая идея, которая возникает в этой задаче -- это написать N mod K
и N div K+1
. Но, к сожалению, это не работает, когда N
делится на K
.
Если бы в этой задаче можно было бы пользоваться условным оператором (if), то все было бы просто. Если бы эта задача была бы на реальной олимпиаде, то, конечно, так и пишите if. Но здесь в учебных целях if'ом пользоваться нельзя.
На помощь придет следующая идея. Давайте сначала попробуем решить немного другую задачу: будем считать, что всё, что есть в этой задаче — строки в книге, страницы и строки на странице — нумеруется с нуля. (А количество строк на странице, конечно, как и раньше считается с 1.) Тогда, если, например, K=3
, то на нулевой странице идут строки 0, 1, 2; на первой странице идут строки 3 4 5 и т.д. И несложно видеть, что вот как раз в этом случае достаточно просто разделить N
на K
; ответом будет N div K
и N mod K
; это работает во всех случаях.
Теперь вернемся к нашей задаче. Нам вводится номер строки, если считать с единицы. Попробуем свести нашу задачу к той, которую мы только что решили; для этого вычтем из N
единицу — получится номер строки в книге как если бы нумерация шла с нуля. Дальше разделим полученное число с остатком на K
и получим правильные номер страницы и номер строки на странице, только нумерация всего всё еще идет с нуля. Прибавим к ответам 1, чтобы получить нумерацию с единицы.
Итого решение задачи: (N-1) div K + 1
и (N-1) mod K + 1
.
Вообще, это очень полезная идея — если задача плохо решается при нумерации с единицы, иногда оказывается намного проще перейти к нумерации с нуля. Особенно вот в подобных задачах, где вам явно надо делить на равные части.