玄学错误
查看原帖
玄学错误
1106298
zhangli828楼主2024/9/28 11:49

为什么我下载了样例,在本地测试是对的,但提交显示我输出 00。代码如下。

#include <bits/stdc++.h>

using namespace std;

const long long kMaxN = 1e5 + 10, kMod = 1e4 + 7;

long long u[kMaxN], v[kMaxN], n, k, top;
char sta[kMaxN], ans[2 * kMaxN];
string c;

int main() {
  cin >> n >> c, ans[++k] = '.';
  for (long long i = 0; i < n; i++) {
    (c[i] == '(' || c[i] == '*') && (sta[++top] = c[i]);
    if (c[i] == '+') {
      for (; sta[top] == '*'; ans[++k] = sta[top--]) {
      }
      sta[++top] = c[i];
    }
    if (c[i] == ')') {
      for (; sta[top] != '('; ans[++k] = sta[top--]) {
      }
      top--;
    }
    (c[i] != '(' && c[i] != ')') && (ans[++k] = '.');
  }
  for (; top > 0; ans[++k] = sta[top--]) {
  }
  for (long long i = 1; i <= k; i++) {
    (ans[i] == '.') && (u[++top] = v[top] = 1);
    (ans[i] == '*') && (u[--top] = (u[top + 1] * v[top] + u[top] * v[top + 1] + u[top] * u[top + 1]) % kMod, v[top] = v[top] * v[top + 1] % kMod);
    (ans[i] == '+') && (v[--top] = (u[top + 1] * v[top] + u[top] * v[top + 1] + v[top] * v[top + 1]) % kMod, u[top] = u[top] * u[top + 1] % kMod);
  }
  cout << u[1] << '\n';
  return 0;
}
2024/9/28 11:49
加载中...