Родители Лизы подключили пакет, содержащий N телевизионных каналов, пронумерованных числами от 1 до N.
Переключать каналы можно с помощью двух кнопок на пульте: «+» и «–».
Короткое нажатие на кнопку «+» приведёт к переключению на следующий канал, если номер текущего канала меньше N; если же номер текущего канала равен N, то телевизор продолжит показывать этот канал. Если кнопку «+» нажать и удерживать некоторое время, произойдёт переход на K каналов вперёд при условии, что номер текущего канала не превосходит N−K. В противном случае произойдёт переход на канал N.
Аналогично, короткое нажатие на кнопку «−» приведёт к переключению на предыдущий канал, если номер текущего канала больше 1; если же номер текущего канала равен 1, телевизор продолжит показывать этот канал. Если кнопку «−» нажать и удерживать некоторое время, то произойдёт переход на K каналов назад при условии, что номер текущего канала превышает K. В противном случае произойдёт переход на канал 1.
Лиза включила телевизор и обнаружила, что он показывает канал P. Лиза знает, что очень скоро по каналу с номером U начнётся интересная передача. Определите, какое минимальное количество нажатий на кнопки пульта потребуется сделать Лизе, чтобы переключиться на канал U.
1 Ответ
Если номер текущего канала P и мы хотим переключиться на U, то нужно нажать на «+», чтобы получить канал U+1. Если канал U уже существует, то мы можем сразу переключиться на него. Если же канал U не существует, то нам нужно переключиться на 1 и затем на U−1. Минимальное количество нажатий кнопок на пульте для переключения на канал a=(u — p) + (u — p — n) при (u — p) > n (u — p)<=n . Таким образом, минимальное количество нажатий равно:
#include <iostream>
#include <queue>
#include <math.h>
using namespace std;
int main(){
int n, k, p, u, ans = 0;
cin >> n >> k >> p >> u;
int a = (p — 1 + k — 1) / k, b = (n — p + k — 1) / k;
ans = min(abs(p — u) / k + abs(p — u) % k, (abs(p — u) + k — 1) / k + abs(p % k — u % k));
ans = min(ans, (u — 1) / k + (u — 1) % k + a);
ans = min(ans, (n — u) / k + (n — u) % k + b);
cout << ans << endl;
}