友達に電話する必要がありますが、コードレス電話のボタンが正しく機能しません。押すことができるボタンは、[上へ]、[下へ]、[通話]のみです。[上へ]および[下へ]を使用して最近の通話をナビゲートし、[通話]を使用して選択した名前を呼び出すことができます。私の電話には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。