Разбор задачи "Строки в книге"

Первая идея, которая возникает в этой задаче -- это написать 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.

Вообще, это очень полезная идея — если задача плохо решается при нумерации с единицы, иногда оказывается намного проще перейти к нумерации с нуля. Особенно вот в подобных задачах, где вам явно надо делить на равные части.