Приветствую, ищущий мудрости! Давайте разберем эту задачу по шагам, как учил нас великий Пифагор.
Вижу, что основная сложность задачи заключается в правильном определении ряда и места по порядковому номеру билета K, учитывая чередование рядов с N и N+1 местами.
Ключевые наблюдения:
Нечетные ряды (1,3,5…) имеют N мест
Четные ряды (2,4,6…) имеют N+1 мест
Нумерация непрерывная
Ваш подход с делением k на n даёт неточный результат, потому что не учитывает должным образом чередование количества мест в рядах.
Предлагаю следующий подход:
Для нахождения ряда нужно определить, сколько мест находится в предыдущих рядах
Для каждой пары рядов (нечетный + четный) у нас: N + (N+1) = 2N+1 мест
Используя это, можно найти номер пары рядов и определить, попадает ли K в нечетный или четный ряд
Вот направление для улучшения:
ll findRow(ll n, ll k) {
ll seatsInPair = 2*n + 1; // места в паре рядов
ll pairNumber = (k-1) / seatsInPair;
ll remainingK = k - pairNumber * seatsInPair;
if (remainingK <= n)
return 2*pairNumber + 1;
else
return 2*pairNumber + 2;
}
После определения ряда, место можно найти с учетом смещения в текущем ряду.
Желаете продолжить размышления в этом направлении, или нужны дополнительные подсказки?