公式
F - 式の評価/Evaluate Formula 解説
by
解説
F - 式の評価/Evaluate Formula 解説
by
yuto1115
解説
以下のようなアルゴリズムによって解くことができます。
- 変数 \(\text{ans},\text{now}\) を用意し \(\text{ans}=1,\text{now}=0\) と初期化する。
- \(S\) の各文字を左から順に見ていって、それぞれの文字について以下を行う。
- 今見ている文字が
*である場合:\(\text{ans}\) に \(\text{now}\) をかけ、\(\text{now}\) を \(0\) に戻す。 - 今見ている文字が数字である場合:\(\text{now}\) の一番下の桁に今見ている数字を追加する。例えば、\(\text{now}=10\) であり今見ている文字が
2ならば、\(\text{now}\leftarrow102\) と更新する。
- 今見ている文字が
「\(\text{now}\) の一番下の桁に今見ている数字を追加する」という操作についてですが、これは \(\text{now}\) に \(10\) をかけた上で今見ている数字を \(\text{now}\) に足すことで簡単に実装できます。なお、\(\text{ans},\text{now}\) は非常に大きくなることがあるため、適宜 \(998244353\) で割った余りをとる必要があることに注意してください。
実装例 (C++) :
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod = 998244353;
int main() {
string s;
cin >> s;
ll ans = 1, now = 0;
for (char c: s) {
if (c == '*') {
ans *= now;
ans %= mod;
now = 0;
} else {
now *= 10;
now += c - '0';
now %= mod;
}
}
ans *= now;
ans %= mod;
cout << ans << endl;
}
投稿日時:
最終更新: