結果

問題 No.2283 Prohibit Three Consecutive
ユーザー yabityabit
提出日時 2023-07-07 14:11:05
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,059 bytes
コンパイル時間 198 ms
コンパイル使用メモリ 81,792 KB
実行使用メモリ 91,392 KB
最終ジャッジ日時 2024-07-21 09:20:41
合計ジャッジ時間 3,368 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 41 ms
51,968 KB
testcase_01 AC 41 ms
51,840 KB
testcase_02 AC 44 ms
51,968 KB
testcase_03 AC 95 ms
81,432 KB
testcase_04 AC 114 ms
81,536 KB
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 AC 68 ms
75,520 KB
testcase_09 AC 67 ms
75,904 KB
testcase_10 AC 94 ms
91,392 KB
testcase_11 AC 94 ms
91,008 KB
testcase_12 WA -
testcase_13 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

binary_dict = {
    '00': [0],
    '01': [1],
    '10': [2],
    '11': [3],
    '?0': [0, 2],
    '?1': [1, 3],
    '0?': [0, 1],
    '1?': [2, 3],
    '??': [0, 1, 2, 3]
}
T = int(input())
for t in range(T):
    N = int(input())
    S = list(input())
    dp = [[0,0,0,0] for _ in range(N)]
    # dp[i][S]: i番目まで見たとき、S(0 0, 0 1, 1 0, 1 1)が構成可能か
    # print(S[0]+S[1], binary_dict[S[0]+S[1]])
    for b in binary_dict[S[0]+S[1]]:
        dp[0][b] = 1
    # print(dp)
    for i in range(1, N+1):
        if i == N:
            for j in range(4):
                dp[0][j] = 0
        p = (i-1)%N
        r = i%N
        q = (i+1)%N
        if S[q] != '0': # 1の場合
            if dp[p][0]: dp[r][1] = 1
            if dp[p][1]: dp[r][3] = 1
            if dp[p][2]: dp[r][1] = 1
        if S[q] != '1': # 0の場合
            if dp[p][1]: dp[r][2] = 1
            if dp[p][2]: dp[r][0] = 1
            if dp[p][3]: dp[r][2] = 1
    # print(dp)
    if any([d for d in dp[0]]):
        print('Yes')
    else:
        print('No')
0