結果
| 問題 |
No.3114 0→1
|
| コンテスト | |
| ユーザー |
kakur41
|
| 提出日時 | 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()
kakur41