以下为不影响题意的简化版题目。
给出一个由(,),|,a组成的序列,求化简后有多少个a。
化简规则:
1、形如aa...a|aa...a|aa...a的,化简结果为“|”两边a的个数最多的一项,例如a|aa|aaa=aaa 3、先算带括号的序列,例如(a|a)|aaa=aaa
一行一个序列
化简后a的个数
aa(aa)|(aa|(a|aa))aa
4
原题的样例记不得了,只能随便写个代替了。。。
序列长度不超过100000
保证序列合法且括号内和“|”左右均非空
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; int findans(int ans){ char c; while((c=getchar())!=EOF){ if(c==‘a‘){ans++;} if(c==‘(‘){ans=ans+findans(0);} if(c==‘|‘){return max(ans,findans(0));} if(c==‘)‘){return ans;} } return ans; } int main(){ printf("%d",findans(0)); return 0; }
原文:https://www.cnblogs.com/xiongchongwen/p/11391363.html