結果

問題 No.3500 01 String
コンテスト
ユーザー Azaki
提出日時 2026-04-18 01:23:36
言語 Python3
(3.14.3 + numpy 2.4.4 + scipy 1.17.1)
コンパイル:
python3 -mpy_compile _filename_
実行:
python3 _filename_
結果
WA  
実行時間 -
コード長 2,141 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 450 ms
コンパイル使用メモリ 20,776 KB
実行使用メモリ 16,220 KB
最終ジャッジ日時 2026-04-18 01:23:40
合計ジャッジ時間 3,606 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 WA * 2
other AC * 3 WA * 17
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys

def solve():
    input_data = sys.stdin.read().split()
    if not input_data:
        return
    
    a = input_data[0]
    n = len(a)
    
    MOD = 998244353

    # 1. 最初に出現する '0' と、最後に出現する '1' を探す
    first_zero = a.find('0')
    last_one = a.rfind('1')

    # 2. '0' が存在しない、'1' が存在しない、または 0が1より後ろにしかない場合
    # このときは文字列を変化させることができない
    if first_zero == -1 or last_one == -1 or first_zero > last_one:
        print(1)
        return

    # 3. 変化可能な範囲は [first_zero, last_one]
    # この範囲内にある "01" という並びが、自由度を生む
    ans = 1
    count = 0
    # 範囲内を走査して、連続する 0...1 の塊を数える
    # 実際には、'0' が出た後に '1' が出る箇所の「隙間」を数え上げます
    for i in range(first_zero, last_one):
        if a[i] == '0' and a[i+1] == '1':
            count += 1
            
    # 各 01 ペアについて、その間をどう埋めるかが選択肢になる
    # 正確には「0...1」という構造の数 + 1 が答えに関わります
    # この問題のケースでは、(01の数 + 1) ではなく、
    # 連続する「自由区間」の長さを用いた計算が適切です。
    
    # --- 再修正方針 ---
    # 実は、この問題は「0...1」となっている箇所の
    # 01, 001, 011 などの「変化できる塊」を分離して考えます。
    
    res = 1
    free_zones = []
    i = first_zero
    while i < last_one:
        if a[i] == '0':
            # 0から始まる 0...1 の区間を探す
            j = i
            found_one = False
            while j <= last_one:
                if a[j] == '1':
                    found_one = True
                if found_one and (j == last_one or a[j+1] == '0'):
                    # 0...1 のひと塊が終了
                    res = res * (j - i + 1) % MOD
                    i = j
                    break
                j += 1
        i += 1
        
    print(res)

solve()
0