挣扎了好久终于A了
大佬说这是一个模拟题,然后果断发现看不懂。。。
大佬给我们讲(fa)了(le)一(ti)下(jie),大概就是把这个表达式用 | 分开,分成每份只有 & ,然后对于只有”&&”的情况,k个fork()的表达式会有k种方案返回0,1种方案返回1(找规律)。最后从左到右计算i到tot的方案数(这应该是dp啊)
#include <bits/stdc++.h>
#define MOD 998244353
using namespace std;
int n,tot=1,k,ans;
char a[100005];
int ans0[100005],ans1[100005];
int main()
{
scanf ("%d",&n);
ans0[0]=1;ans1[0]=1;
for(int i=1;i<=n-1;i++)
{
char c;
scanf("%c%c%c",&c,&c,&c);
if(c=='&')
tot++;
else
{
ans0[++k]=tot;
ans1[k]=1;
tot=1;
}
}
ans0[++k]=tot;
ans1[k]=1;
for (int i=1;i<=k;i++)
{
ans=(ans+(long long)ans1[i]*ans0[i-1]%MOD)%MOD;
ans0[i]=(long long)ans0[i]*ans0[i-1]%MOD;
}
ans=(ans+ans0[k])%MOD;
printf("%lld",ans);
return 0;
}