求助,等价表达式那题,本地ac提交wa
查看原帖
求助,等价表达式那题,本地ac提交wa
230875
Surge_of_Force楼主2022/5/22 19:43

这是 #1:

输入:
a + (1 +5)
8
((a + 1 + 5))
1 + 5 + a
a + a + 1 + 1 + 5 + 6
a-(a + 1) + 1+1+5+12-12  +6-6+a-(8 -8)
1023 + a + 5 - 1022
6 -(6-(9-(9-(8-(5+8))))) -(a -5) +a +1+5+a
9+9+4+6+9+1-9-5-1-(8-7)
9999 + 9999+9999+9999-(9999 + 9999+9999+9999)+a+ 5
输出:
ABDEF

我的程序输出:

ABDEF

显示在第三列读到了C? 难道是因为linux下的换行符和Windows不同吗?求大佬解答

附上代码:

#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;
const int MAX=1e3+10;
const int MOD=998244353;
inline char readchar() {
	static char buf[100000], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
}
inline int read() {
#define readchar getchar
	int res = 0, f = 0;
	char ch = readchar();
	for(; !isdigit(ch); ch = readchar()) if(ch == '-') f = 1;
	for(; isdigit(ch);ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0');
	return f ? -res : res;
}
inline void write(int x) {
    if(x<0){putchar('-');x=-x;}
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
string ss,ss1;
int ans[20],nb[300];
int ksm(int ds,int zs)
{
	int ret=1;
	while(zs)
	{
		if(zs&1) ret=(ret*ds)%MOD;
		ds=(ds*ds)%MOD;zs>>=1;
	}
	return ret;
}
int calc(string s,int l,int r,int a)
{
	int yxj=0,jl=0,mn=MOD;
//	cout<<l<<" "<<r<<endl;
	for(int i=r,noww=MOD;i>=l;i--)
	{
		if(isdigit(s[i])||s[i]=='a') continue;//不是运算符 
		if(s[i]==')') yxj+=100;
		if(s[i]=='(') yxj-=100;
		noww=yxj+nb[s[i]];
		if(mn>noww&&s[i]!='('&&s[i]!=')') mn=noww,jl=i;
//		cout<<i<<" "<<noww<<endl;
	}
//	cout<<jl<<endl;
	if(!jl)
	{
		int ret=0;
		for(int i=l;i<=r;i++) if(s[i]=='a') return a;
		for(int i=l;i<=r;i++) if(isdigit(s[i])) ret=ret*10+s[i]-'0';
//		cout<<ret<<endl;
		return ret; 
	}
	else
	{
		if(s[jl]=='^') return ksm(calc(s,l,jl-1,a),calc(s,jl+1,r,a));
		if(s[jl]=='-') return (calc(s,l,jl-1,a)-calc(s,jl+1,r,a))%MOD;
		if(s[jl]=='+') return (calc(s,l,jl-1,a)+calc(s,jl+1,r,a))%MOD;
		if(s[jl]=='*') return (calc(s,l,jl-1,a)*calc(s,jl+1,r,a))%MOD;
	}
	return 0;
}
signed main()
{
	getline(cin,ss);ss=" "+ss;
	int n=read();
	ss1=" ";
	nb['+']=1;nb['-']=1;nb['*']=2;nb['^']=3;//优先级 
	for(int i=1;i<ss.size();i++) if(ss[i]!=' ') ss1=ss1+ss[i];
	for(int i=0;i<=10;i++) ans[i]=calc(ss1,1,ss1.size()-1,i); 
	for(int i=1;i<=n;i++)
	{
		string s,s1=" ";
		getline(cin,s);
		s=" "+s;
		for(int j=1;j<s.size();j++) if(s[j]!=' ') s1=s1+s[j];
		int f=0;
		for(int j=0;j<=10;j++)
		{
			int t1=calc(s1,1,s1.size()-1,j);
//			cout<<t1<<endl;
			if(t1!=ans[j]){f=1;break;}
		}
		if(!f) cout<<char('A'+i-1);
	}
	return 0;
}
2022/5/22 19:43
加载中...