[伯俊]18115号-放卡Python


質問する
秀賢はトランプの技術を練習している.秀賢が持っているカードを一枚一枚置いて地面に積み上げたい.秀賢が使える技術は3種類ある.
  • 最初のカードを地面に置いた.
  • の上に、2枚目のカードを地面に置きます.カードは2枚以上しか使えません.
  • 一番下の札を地面に置きます.カードは2枚以上しか使えません.
  • 秀賢は最初にN枚のカードを持っていた.カードには1からNまでの整数が重複しないと書かれています.N回スキルを使ってカードを下ろすとき、置いてあるカードを確認し、上から順に1、2、…、Nと書いてあります!
    驚いた秀賢はカードがどのように置かれているのか知り始めた.初期カードの状態をプリントアウトします.
    入力
    第1行はN(1≦N≦106)を与える.
    2行目は長さNの数列Aを与える.Aiがxなら、2回目にカードを置くときにx番技術を使ったということです.Aiは1.2.3の1つで、Anはいつも1です.
    しゅつりょく
    初期カードの状態を上から順に出力します.
    入力例1
    5
    1 1 1 1 1
    サンプル出力1
    5 4 3 2 1
    入力例2
    5
    2 3 3 2 1
    サンプル出力2
    1 5 2 3 4
    に答える
    from collections import deque
    import sys
    
    input = sys.stdin.readline
    
    n = int(input().rstrip())
    
    stack = [i for i in range(n,0,-1)]
    ans = deque()
    skills = list(map(int,input().rstrip().split()))
    skills.reverse()
    for skill in skills:
        if skill == 1:
            ans.append(stack.pop())
        elif skill == 2:
            ans.insert(-1,stack.pop())
        elif skill == 3:
            ans.appendleft(stack.pop())
    ans.reverse()
    print(*ans)
    整理する
  • に導入された技術を逆にデックに挿入する.2 3 3 2 1の場合、1 2 3 3 2の順にカードを入れ直します.
  • 1であれば、デックの最後に置きます.
  • 2の場合は、デックの後ろに2番目に入れます.
  • 3の場合は、デックの一番前に置きます.
  • そうすれば、入る順番が逆になって、もう1枚カードを入れると、元のカードの番号がわかります.