結果

問題 No.3395 Range Flipping Game
コンテスト
ユーザー 回転
提出日時 2025-12-02 00:54:47
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,633 bytes
コンパイル時間 291 ms
コンパイル使用メモリ 82,460 KB
実行使用メモリ 151,204 KB
最終ジャッジ日時 2025-12-02 00:54:56
合計ジャッジ時間 8,370 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 18 WA * 12
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def run_length(S):
    ret = []
    now = None
    count = 0
    N = len(S)
    for i in range(N):
        if(S[i] == now):
            count += 1
        else:
            ret.append((now,count))
            count = 1
            now = S[i]
    ret.append((now,count))
    return ret[1:]

def decode(S):
    ret = []
    for a,b in S:
        ret.append(a*b)
    return "".join(ret)

T = int(input())
for _ in range(T):
    N = int(input())
    S = list(input())

    if(N <= 2):
        print("B"*N)
        continue

    if(S[0] == S[1] == "B"):
        print("".join(S))
        continue
    rle = run_length(S)

    # Alice
    if(S[0] == "A" and S[1] == "B"):
        if(rle[1][1] == 1):
            ptr = 3
            while(ptr < len(rle)):
                if(rle[ptr][1] >= 2):
                    rle = rle[:ptr] + [("A",rle[ptr][1])] + rle[ptr+1:]
                    break
                ptr += 2
        else:
            rle = rle[:1] + [("B",1), ("A", rle[1][1]-1)] + rle[2:]

    elif(S[0] == "A" and S[1] == "A"):
        if(S[2] == "A"):
            rle = [("A",1), ("B",1), ("A", rle[0][1]-2)] + rle[1:]
        else:
            rle = [("A",1), ("B",1), ("A", rle[1][1])] + rle[2:]

    elif(S[0] == "B" and S[1] == "A"):
        if(S[2] == "A"):
            rle = [("A",1), ("B",1), ("A",rle[1][1]-1)] + rle[2:]
        else:
            rle = [("A",1), ("B",1), ("A",rle[2][1])] + rle[3:]

    rle = run_length(decode(rle))

    # Bob
    ptr = 0
    while(ptr < len(rle)):
        if(rle[ptr][0] == "A"):
            rle[ptr] = ("B", rle[ptr][1])
            break
        ptr += 1
    
    print(decode(rle))
0