TAG
- 芝士水题、算法 − 【 S T L − v e c t o r 、模拟】、思维 − 【类栈】 芝士水题、算法 - 【STL - vector、模拟】、思维 - 【类栈】 芝士水题、算法−【STL−vector、模拟】、思维−【类栈】时间复杂度
- O ( N ) O(N) O(N)
//
#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int MOD = 10000;
vector<int> v_num;
vector<char> v_op;
string s;
int f(int x, int y, bool isint) { // 递归会WA?不理解捏
if (isint) {
int ans = 0;
for (int i = x; i <= y; i++) {
ans = ((ans << 3) + (ans << 1) + (s[i] - '0')) % MOD;
}
return ans;
}
for (int i = x; i <= y; i++) {
if (s[i] == '*') {
return (f(x, i - 1, 1) * f(i + 1, y, 0)) % MOD;
} else if (s[i] == '+') {
return (f(x, i - 1, 1) + f(i + 1, y, 0)) % MOD;
}
}
return f(x, y, 1);
}
void solve() {
cin >> s;
for (int i = 0; i < s.size(); i++) {
if (isdigit(s[i])) {
int tt = 0;
while (isdigit(s[i])) tt = ((tt << 3) + (tt << 1) + (s[i] - '0')) % MOD, i++;
v_num.push_back(tt);
if (s[i] == '*' || s[i] == '+') v_op.push_back(s[i]);
}
}
int ans = 0, tt = v_num[0];
for (int i = 0; i < v_op.size(); i++) {
if (v_op[i] == '+') {
ans = (ans + tt) % MOD;
tt = v_num[i + 1];
} else if (v_op[i] == '*') {
tt = tt * v_num[i + 1] % MOD;
}
}
ans = (ans + tt) % MOD;
printf("%d\n", ans);
// printf("%d\n", f(0, s.size() - 1, 0));
}
signed main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
实现细节
- `
参考示意图
-
`
参考链接
- `
作者 | 乐意奥AI