ฉันต้องโทรหาเพื่อน ๆ แต่ปุ่มของโทรศัพท์ไร้สายทำงานไม่ถูกต้อง ปุ่มเดียวที่ฉันสามารถกดได้คือ [ขึ้น], [ลง] และ [โทร] สามารถใช้ [ขึ้น] และ [ลง] เพื่อนำทางในสายล่าสุดของฉันและสามารถใช้ [โทร] เพื่อโทรหาชื่อที่เลือกได้ โทรศัพท์ของฉันมีรายการที่มี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
จากแหล่งใดก็ได้: แป้นพิมพ์พารามิเตอร์ไฟล์ ฯลฯ - ชื่อในรายการสามารถอยู่ในรูปแบบที่สมเหตุสมผลเช่น: สตริง, จำนวนเต็ม, ตัวอักษร;
- เมื่อคุณมาถึงจุดสิ้นสุดของรายการโทรล่าสุดและกด [ลง] อีกครั้งเคอร์เซอร์จะล้อมรอบ สิ่งเดียวกันจะเกิดขึ้นเมื่อคุณอยู่ในช่วงเริ่มต้นของรายการโทรล่าสุดและกด [ขึ้น];
- เมื่อคุณโทรหาใครบางคนชื่อของบุคคลนั้นจะถูกย้ายไปยังตำแหน่งแรกของรายการโทรล่าสุดและส่วนที่เหลือจะถูกกดลง
- เมื่อคุณโทรหาใครบางคนเคอร์เซอร์ของคุณจะถูกย้ายไปที่ตำแหน่งแรก
- ชื่อเพื่อนไม่สามารถปรากฏได้มากกว่าหนึ่งครั้งในรายการโทรล่าสุด
- คุณสามารถเติมรายการโทรล่าสุดของคุณด้วยรายการจำลอง (ดูตัวอย่าง);
N
จำนวนเพื่อนที่จะเรียกจะไม่มากกว่า