結果

問題 No.3053 $((0 \And 1)\mathop{|}2)\oplus 3$
ユーザー suisen
提出日時 2025-01-18 16:29:25
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 164 ms / 2,000 ms
コード長 818 bytes
コンパイル時間 531 ms
コンパイル使用メモリ 82,424 KB
実行使用メモリ 132,164 KB
最終ジャッジ日時 2025-03-08 00:10:31
合計ジャッジ時間 5,106 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #

# correct

P = 998244353

def inv(x: int) -> int:
    """Return the modular inverse of x."""
    return pow(x, P - 2, P)

N_digits = list(map(int, reversed(input())))
L = len(N_digits)

def nth_pow(x: int) -> int:
    """Return x^N mod P."""
    res = 1
    for d in N_digits:
        if d:
            res = res * x % P
        x = x * x % P
    return res

ans = 0

# --- 1 ---
N = 0
for d in reversed(N_digits):
    N = (2 * N + d) % P
ans += 2 * N * nth_pow(3) % P * inv(3) % P

# --- 0 ---
pow_r_doubling = 3 * inv(2) % P
pow_2 = 1
ans_0 = 0
for d in N_digits:
    if d == 0:
        ans_0 = (ans_0 + pow_2) % P
    else:
        ans_0 = (ans_0 * pow_r_doubling) % P
    pow_r_doubling = pow_r_doubling * pow_r_doubling % P
    pow_2 = pow_2 * 2 % P
ans += ans_0 * nth_pow(2) * 4 % P * inv(9) % P

print(ans % P)
0