結果
問題 |
No.3114 0→1
|
ユーザー |
|
提出日時 | 2025-04-18 22:53:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 148 ms / 2,000 ms |
コード長 | 826 bytes |
コンパイル時間 | 246 ms |
コンパイル使用メモリ | 82,308 KB |
実行使用メモリ | 110,604 KB |
最終ジャッジ日時 | 2025-04-18 22:53:51 |
合計ジャッジ時間 | 4,804 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
N=int(input()) S=input() if N==1: print(1-int(S)) exit() if N==2: if S=="00": print(1) else: print(0) exit() dp=[] for i in range(N+1): dp.append([10**18]*8) ok=set([3,5,6,7]) s=S[:3] if s=="000": dp[3][3]=2 dp[3][5]=2 dp[3][6]=2 dp[3][7]=3 elif s=="001": dp[3][3]=1 dp[3][5]=1 dp[3][7]=2 elif s=="010": dp[3][3]=1 dp[3][6]=1 dp[3][7]=1 elif s=="011": dp[3][3]=0 dp[3][7]=1 elif s=="100": dp[3][5]=1 dp[3][6]=1 dp[3][7]=2 elif s=="101": dp[3][5]=0 dp[3][7]=1 elif s=="110": dp[3][6]=0 dp[3][7]=1 else: dp[3][7]=0 for i in range(3,N): if S[i]=="1": for j in ok: dp[i+1][(2*j+1)%8]=min(dp[i+1][(2*j+1)%8],dp[i][j]) else: for j in ok: dp[i+1][(2*j)%8]=min(dp[i+1][(2*j)%8],dp[i][j]) dp[i+1][(2*j+1)%8]=min(dp[i+1][(2*j+1)%8],dp[i][j]+1) print(min(dp[N][3],dp[N][5],dp[N][6],dp[N][7]))