考え方
- 余りだけを管理する.
- $10^n$の計算は,先に計算しておくか,繰り返し二乗法(繰り返し二乗法 - 競プロはじめました)を使う.
※Python の剰余演算子%は,除数(割る方の数)と同じ符号の結果を返す.
回答例
from collections import deque Q = int(input()) mod = 998244353 S = deque([1]) ans = 1 for _ in range(Q): q = list(map(int, input().split())) if q[0] == 1: ans = 10 * ans + q[1] ans %= mod S.append(q[1]) elif q[0] == 2: num = S.popleft() ans -= pow(10, len(S), mod) * num ans %= mod elif q[0] == 3: print(ans)
先に$10^n$を計算しておく例:Submission #40652135 - TOYOTA MOTOR CORPORATION Programming Contest 2023#1 (AtCoder Beginner Contest 298)