下载样例数据自测能过,但提交显示WA。求助。
查看原帖
下载样例数据自测能过,但提交显示WA。求助。
1132921
zhanghdave楼主2023/12/4 14:26

题不难,思路就是复用了计算器的算法。自测各种数据都能得到正确解,但提交全都是WA,看错误信息感觉输出的都是“0”。是编译器的问题么?哪个大佬能帮忙看看?要跪了。

源代码如下:

#include <iostream>
#include <cstring>

using namespace std;

const int MOD = 10007, MAX = 100001;
int num[MAX][2];
char op[MAX];

void add(int i)
{
	int temp = (num[i-1][0] * num[i][0]) % MOD;
	num[i-1][1] = (num[i-1][0] * num[i][1] + num[i-1][1] * num[i][0] + num[i-1][1] * num[i][1]) % MOD;
	num[i-1][0] = temp;
}

void mult(int i)
{
	int temp = (num[i-1][1] * num[i][1]) % MOD;
	num[i-1][0] = (num[i-1][0] * num[i][0] + num[i-1][0] * num[i][1] + num[i-1][1] * num[i][0]) % MOD;
	num[i-1][1] = temp;
}

int main()
{
	int l, countOp, countNum;
	string exp;
	
	cin >> l >> exp;
	countOp = countNum = -1;
	num[0][0] = num[0][1] = 1;
	
	for (int i = 0; i < l; i++) {
		if (exp[i] == '+') {
			if (i == 0 || exp[i-1] != ')') num[++countNum][0] = num[countNum][1] = 1;
			
			if (countOp >= 0) {
				if (op[countOp] == '+') {
					add(countNum--);
					countOp--;
				}
				else if (op[countOp] == '*') {
					mult(countNum--);
					countOp--;
				}
			}
			
			op[++countOp] = exp[i];
		}
		else if (exp[i] == '*') {
			if (i == 0 || exp[i-1] != ')') num[++countNum][0] = num[countNum][1] = 1;
			
			if (countOp >= 0) {
				if (op[countOp] == '*') {
					mult(countNum--);
					countOp--;
				}
			}
			
			op[++countOp] = exp[i];
		}
		else if (exp[i] == ')') {
			if (exp[i-1] != ')') num[++countNum][0] = num[countNum][1] = 1;
			
			while (op[countOp] != '(') {
				if (op[countOp] == '+') {
					add(countNum--);
					countOp--;
				}
				else if (op[countOp] == '*') {
					mult(countNum--);
					countOp--;
				}
			}
			
			countOp--;
		}
		else if (exp[i] == '(') op[++countOp] = exp[i];
	}
	
	if (l && (exp[l-1] == '+' || exp[l-1] == '*')) num[++countNum][0] = num[countNum][1] = 1;
	
	while (countOp >= 0) {
		if (op[countOp] == '+') {
			add(countNum--);
			countOp--;
		}
		else if (op[countOp] == '*') {
			mult(countNum--);
			countOp--;
		}
	}
	
	cout << num[0][0];
	
	return 0;
}
2023/12/4 14:26
加载中...