Мне нужно позвонить друзьям, но кнопки моего беспроводного телефона не работают должным образом. Единственные кнопки, которые я могу нажать, это [Вверх], [Вниз] и [Вызов]. [Вверх] и [Вниз] можно использовать для навигации по моим последним вызовам, а [Вызов] можно использовать для вызова выбранного имени. В моем телефоне есть список N
последних звонков, и я знаю, что все друзья, которым мне нужно позвонить, находятся в этом списке.
Задача:
Вы получите номер N
и список имен L
:
N
количество последних звонков, которые может запомнить мой телефон;L
имеет имена в порядке, мне нужно позвонить.
Вы должны вывести количество нажатий кнопок, которое мне нужно сделать, при оптимальном расположении списка недавних вызовов.
Пример:
-> Ввод:
Звоню Анне, Бобу, а потом снова Анне. С последними звонками список размером 5.
5
Anna
Bob
Anna
-> Вывод:
Возможное оптимальное расположение: Anna, Foo, Bar, Foobar, Bob
5 # Key presses: [Call] Anna, [Up] + [Call] Bob, [Down] + [Call] Anna
Больше тестовых случаев:
Input: 5, Anna, Bob, Carl
Output: 5
Input: 5, Anna, Bob, Carl, Anna
Output: 8
Input: 5, A, B, C, D, E, A
Output: 11
Input: 6, A, B, C, D, E, A
Output: 12
Input: 4, A, B, C, B, A
Output: 10
Правила:
- Ваш курсор всегда будет начинаться с первой позиции списка;
- Вы можете взять ввод
N
иL
из любого источника: клавиатура, параметры, файл и т. Д .; - Имена в списке могут быть в любом приемлемом формате, таком как: строки, целые числа, символы;
- Когда вы дойдете до конца списка последних вызовов и снова нажмете [Вниз], курсор переместится. То же самое происходит, когда вы находитесь в начале списка недавних вызовов и нажимаете [Up];
- Когда вы звоните кому-то, его имя будет перемещено на первую позицию в списке последних вызовов, а остальные будут сдвинуты вниз;
- Когда вы звоните кому-то, ваш курсор будет перемещен в первую позицию;
- Имя друга не может появляться более одного раза в списке последних вызовов;
- Вы можете заполнить список последних звонков фиктивными записями (см. Пример);
- Количество звонящих друзей не будет больше, чем
N
.
источник
x=[x[a]]+x[:a]+x[a+1:]
присваиваетx
новый объект списка.i
все равно будетindex
метод на старом объекте спискаx.index
.JavaScript (SpiderMonkey) ,
213143 байтаПопробуйте онлайн!
Создает оптимальное расположение данных имен, а затем подсчитывает количество нажатий клавиш.Пропустил поколение и просто посчитал, сколько нажатий клавиш потребуется для каждого имени в оптимальном порядке
источник