結果

問題 No.1328 alligachi-problem
コンテスト
ユーザー tktk_snsn
提出日時 2020-12-25 16:34:53
言語 Python3
(3.14.3 + numpy 2.4.4 + scipy 1.17.1)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
WA  
実行時間 -
コード長 1,674 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 648 ms
コンパイル使用メモリ 20,700 KB
実行使用メモリ 82,392 KB
最終ジャッジ日時 2026-04-10 15:32:13
合計ジャッジ時間 8,612 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 4 WA * 6 TLE * 1 -- * 14
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 7)

N = int(input())
red_red = [[] for _ in range(N + 1)]
red_blue = [[] for _ in range(N + 1)]
blue_blue = [[] for _ in range(N + 1)]
blue_red = [[] for _ in range(N + 1)]

for i in range(1, N+1):
    c, x, y = input().rstrip().split()
    y = int(y)
    if c == "R":
        if x == "R":
            red_red[y].append(i)
        else:
            red_blue[y].append(i)
    else:
        if x == "R":
            blue_red[y].append(i)
        else:
            blue_blue[y].append(i)


ans = []


def rec(R, B):
    if R + B == N:
        return True

    if red_red[R]:
        sz = len(red_red[R])
        while red_red[R]:
            ans.append(red_red[R].pop())
        if rec(R + sz, B):
            return True
        for _ in range(sz):
            red_red[R].append(ans.pop())

    if red_blue[B]:
        sz = len(red_blue[B])
        while red_blue[B]:
            ans.append(red_blue[B].pop())
        if rec(R + sz, B):
            return True
        for _ in range(sz):
            red_blue[B].append(ans.pop())

    if blue_red[R]:
        sz = len(blue_red[R])
        while blue_red[R]:
            ans.append(blue_red[R].pop())
        if rec(R, B + sz):
            return True
        for _ in range(sz):
            blue_red[R].append(ans.pop())

    if blue_blue[B]:
        sz = len(blue_blue[B])
        while blue_blue[B]:
            ans.append(blue_blue[B].pop())
        if rec(R, B + sz):
            return True
        for _ in range(sz):
            blue_blue[B].append(ans.pop())

    return False


if not rec(0, 0):
    print("No")
else:
    print("Yes")
    print(*ans)
0