結果

問題 No.2283 Prohibit Three Consecutive
ユーザー titiatitia
提出日時 2023-04-28 21:42:09
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 613 ms / 2,000 ms
コード長 1,190 bytes
コンパイル時間 76 ms
コンパイル使用メモリ 12,800 KB
実行使用メモリ 55,404 KB
最終ジャッジ日時 2024-11-17 20:40:59
合計ジャッジ時間 4,849 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = sys.stdin.readline

T=int(input())
for tests in range(T):
    N=int(input())
    S=list(input().strip())

    flag=1

    T=S+S+S+S
    flag=1

    DP=[[0]*4 for i in range(4*N)]
    # 00, 01, 10, 11

    DP[0]=[1,1,1,1]

    for i in range(1,4*N):
        if T[i]=="?":
            if DP[i-1][0]==1:
                DP[i][1]=1
            if DP[i-1][1]==1:
                DP[i][2]=1
                DP[i][3]=1
            if DP[i-1][2]==1:
                DP[i][0]=1
                DP[i][1]=1
            if DP[i-1][3]==1:
                DP[i][2]=1

        elif T[i]=="0":
            if DP[i-1][1]==1:
                DP[i][2]=1
            if DP[i-1][2]==1:
                DP[i][0]=1
            if DP[i-1][3]==1:
                DP[i][2]=1

        elif T[i]=="1":
            if DP[i-1][0]==1:
                DP[i][1]=1
            if DP[i-1][1]==1:
                DP[i][3]=1
            if DP[i-1][2]==1:
                DP[i][1]=1

        #print(i,DP)

        if DP[i][0]==DP[i][1]==DP[i][2]==DP[i][3]==0:
            flag=0
            break


    if flag==1:
        print("Yes")
    else:
        print("No")
            
        

    
        

    
0