HELP!80,两个点TLE了。。。
查看原帖
HELP!80,两个点TLE了。。。
457002
szhl0803楼主2021/10/18 20:55

思路如下:

设表达式F,则:

F=T+|T*,

F=F//它本身

//P1981 [NOIP2013 普及组] 表达式求值
#include <bits/stdc++.h>
using namespace std;
int _int[100005];
int linn = 0;
char _exp[100005];
int expn;
int fn=-1,nw;
int ret;
long long f()
{
	int now = _int[nw];
	nw++;
	fn++;
	if(_exp[fn]=='+')
	{
		if(fn-1>=0&&_exp[fn-1]=='*')
		{
			return now;nw-=1;
		}
		return (now + f())%10000;
	}
	else if(_exp[fn]=='*')
	{
		return (now * f())%10000;
	}
	else return now;
	
}
char in[100005];
int main()
{
	//F -> T + | T *
	scanf("%s",in);char num[100005];
	int nn = 0;
	for(int i=0;i<=strlen(in);i++)
	{//初始处理
		if(in[i]>='0'&&in[i]<='9')
		{
			num[nn]=in[i];
			nn++;
		}
		else
		{
			sscanf(num,"%d",&_int[linn]);
			_int[linn]%=10000;
			linn++;
			memset(num,0,sizeof(num));
			nn = 0;
			_exp[expn]=in[i];
			expn++;
		}
	}
	int ans = 0;
	while(nw<=linn)//么有这个不行
	{
		ans += f();ans%=10000;
	}
	cout<<ans;
	return 0;
}
2021/10/18 20:55
加载中...