結果
問題 | No.3114 0→1 |
ユーザー |
![]() |
提出日時 | 2025-04-20 06:32:42 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 94 ms / 2,000 ms |
コード長 | 2,248 bytes |
コンパイル時間 | 222 ms |
コンパイル使用メモリ | 12,160 KB |
実行使用メモリ | 12,032 KB |
最終ジャッジ日時 | 2025-04-20 06:32:45 |
合計ジャッジ時間 | 3,676 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import sys def solve(): """ 問題を解くメイン関数 """ n = int(sys.stdin.readline()) # 文字列をリストに変換して変更可能にする s = list(sys.stdin.readline().strip()) changes = 0 # 操作回数をカウントする変数 # 文字列を左から右へ走査 for i in range(n): # インデックス i で終わる禁止パターン '010' をチェック # s[i] が '0' であり、かつ s[i-1] が '1', s[i-2] が '0' の場合 if i >= 2 and s[i-2] == '0' and s[i-1] == '1' and s[i] == '0': s[i] = '1' # パターンの末尾の '0' を '1' に変更 changes += 1 # 操作回数をインクリメント continue # このインデックスでの処理は完了 # インデックス i で終わる禁止パターン '100' をチェック # s[i] が '0' であり、かつ s[i-1] が '0', s[i-2] が '1' の場合 # 注意: s[i] は上の '010' チェックで '1' に変更されている可能性があるため、 # ここでは elif ではなく if を使う(あるいは '010' チェックを優先する) # 上の continue により、'010' が見つかった場合はここは実行されない if i >= 2 and s[i-2] == '1' and s[i-1] == '0' and s[i] == '0': s[i] = '1' # パターンの末尾の '0' を '1' に変更 changes += 1 # 操作回数をインクリメント continue # このインデックスでの処理は完了 # インデックス i で終わる禁止パターン '00' をチェック # s[i] が '0' であり、かつ s[i-1] が '0' の場合 # 注意: s[i] は上のチェックで '1' に変更されている可能性がある # 上の continue により、'010' または '100' が見つかった場合はここは実行されない if i >= 1 and s[i-1] == '0' and s[i] == '0': s[i] = '1' # パターンの末尾の '0' を '1' に変更 changes += 1 # 操作回数をインクリメント continue # このインデックスでの処理は完了 # 最終的な操作回数を出力 print(changes) # 関数を実行 solve()