Muszę zadzwonić do znajomych, ale przyciski mojego telefonu bezprzewodowego nie działają poprawnie. Jedynymi przyciskami, które mogę nacisnąć, są [W górę], [W dół] i [Zadzwoń]. Przyciski [W górę] i [W dół] mogą być używane do nawigacji w moich ostatnich połączeniach, a [Połączenie] może być używany do wybierania wybranej nazwy. Mój telefon ma listę N
ostatnich połączeń i wiem, że wszyscy przyjaciele, do których muszę zadzwonić, są na tej liście.
Zadanie:
Otrzymasz numer N
i listę nazwisk L
:
N
to liczba ostatnich połączeń, które mój telefon może zapamiętać;L
ma nazwy w kolejności, w której muszę zadzwonić.
Musisz podać liczbę naciśnięć przycisków, które muszę wykonać w optymalny sposób na liście ostatnich połączeń.
Przykład:
-> Wejście:
Dzwonię do Anny, Boba, a potem znów do Anny. Z listą ostatnich połączeń o rozmiarze 5.
5
Anna
Bob
Anna
-> Wyjście:
Możliwe optymalne ustawienie: Anna, Foo, Bar, Foobar, Bob
5 # Key presses: [Call] Anna, [Up] + [Call] Bob, [Down] + [Call] Anna
Więcej przypadków testowych:
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
Zasady:
- Kursor zawsze zaczyna się od pierwszej pozycji listy;
- Możesz pobrać dane wejściowe
N
iL
z dowolnego źródła: klawiatury, parametrów, pliku itp .; - Nazwy na liście mogą mieć dowolny rozsądny format, taki jak: ciągi, liczby całkowite, znaki;
- Po osiągnięciu końca listy ostatnich połączeń i ponownym naciśnięciu przycisku [W dół] kursor się zawija. To samo dzieje się, gdy jesteś na początku listy ostatnich połączeń i naciskasz [W górę];
- Kiedy zadzwonisz do kogoś, nazwisko tej osoby zostanie przeniesione na pierwszą pozycję listy ostatnich połączeń, a reszta zostanie przesunięta w dół;
- Kiedy do kogoś zadzwonisz, kursor zostanie przesunięty na pierwszą pozycję;
- Imię znajomego nie może pojawić się więcej niż raz na liście ostatnich połączeń;
- Możesz wypełnić listę ostatnich połączeń fałszywymi wpisami (patrz przykład);
- Liczba znajomych, do których można zadzwonić, nie będzie większa niż
N
.
źródło
x=[x[a]]+x[:a]+x[a+1:]
przypisujex
do nowego obiektu listy.i
nadal byłabyindex
metoda na starym obiekcie listyx.index
.JavaScript (SpiderMonkey) ,
213143 bajtówWypróbuj online!
Generuje optymalne ustawienie podanych nazw, a następnie zlicza liczbę naciśnięć klawiszy.Pominięto generację i właśnie policzyłem, ile naciśnięć klawiszy zabrałoby każdą nazwę w optymalnym układzie
źródło