ABC298 D問題 Writing a Numeral
各クエリで を数とみなした値を更新していきます。
クエリ1は、値を10倍してを加えます。
クエリ2は、先頭の数字にをかけた値を引きます。
このクエリのために、追加する数字を配列に記録することと、をあらかじめ計算しておきます。
それぞれの値は、mod 998244353 での値とします。
クエリ3は、更新している値をそのまま出力するだけです。
コード例 (Julia)
_MOD = 998244353 function solve() # 入力 readInts() = parse.(Int,split(readline())) readInt() = parse(Int,readline()) Q = readInt() ord = zeros(Int,600001) # 10^N ord[1] = 1 for i = 1:600000 ord[i+1] = (ord[i] * 10) % _MOD end S = zeros(Int,600001) S[1] = 1 ans = 1 head = 1 tail = 2 for q = 1:Q A = readInts() if A[1] == 1 x = A[2] ans = (ans * 10 + x) % _MOD S[tail] = x tail += 1 elseif A[1] == 2 n = tail - head a = (ord[n] * S[head]) % _MOD ans -= a if ans < 0 ans += _MOD end head += 1 elseif A[1] == 3 println(ans) end end end # function solve # main solve()