5430 AC


質問元:https://www.acmicpc.net/problem/5430

思考過程.


簡単です.RとDの2つの機能しかないので,(1)を反転したり(2)を取り除いたりするだけでよい.
入力された文字列から数字以外の記号を除去するため,「Pythonアルゴリズムインタビュー」でも効率の高い正規表現を用いた処理が見られた.最初は文字列についての問題だったので、考えずにRを純粋に機能に反映していました.arr=arr[::-1]このようにするには、もちろんこれらの要素を覆すのに長い時間がかかります.△短い文字列については、この点は重要ではありませんが、このような10万の問題については、時間を考慮しなければなりません.
そこで時間短縮のために修正が必要で、Rという機能を実現する際には、直接反転する必要はなく、配列の有無によって前後文字の削除だけで済むので、DEQUEを使うことにしました.結果は成功した!
import sys
import re
from collections import deque

T = int(sys.stdin.readline().rstrip("\n"))

def AC(function,n) :
    global nums #함수 내부 변경을 통해 밖에서도 변경 적용
    reverse=1
    for f in function :
        if f == "R":
            reverse = 1 if reverse==-1 else -1
            continue
        elif f == "D" :
            if not nums:
                return False
            if reverse==1 :
                nums.popleft()
            else: #reverse==-1
                nums.pop()
    if reverse==-1:
        nums=list(nums)[::-1]
    return True
for _ in range(T) :
    function = sys.stdin.readline().rstrip("\n")
    n = int(sys.stdin.readline().rstrip("\n"))
    nums = deque(list(re.sub('[^0-9]',' ',sys.stdin.readline().rstrip("\n")).split()))
    if AC(function,n) :
        print("["+",".join(list(nums))+"]")
    else :
        print("error")
より効率的な方法を追求するのは常に正しいので、他の高速運転の人のコードを参考にすることができます.
nums = deque(list(re.sub('[^0-9]',' ',sys.stdin.readline().rstrip("\n")).split()))
異なる正規表現の作成
nums = deque(sys.stdin.readline().rstrip("\n")[1:-1].split(","))
この時!おもしろい間違いが起こる

上のコードは左側のように正常に動作し、下のコードは右側のようにdequeに何かを残しています.
斜線を使用しても、インデックスに何も指示されず、文字列はオブジェクトを生成するようです.
そして.

リストまたはdequeの空の文字列pop()に対してもエラーはありませんか?空の文字列でもpop!!pop()の後は空の状態です.
とりあえずこの部分は頭の中で参考にしてみます(splitの応用も!)上記のように正規表現をスライスすることで、時間を2倍程度短縮することができる.
外部変数の値を変更する場合はglobalまたは戻り値を使用して変更を渡します.