uoj 传送门
蒟蒻做这个题是一懵一懵的啊。题意就好难懂!
我们以 || 为分界线,分成若干块。因为在每一小块中有0这一块的返回值就是0,在整个表达式中有某一块的返回值为1,那整个式子就是1,剩下的块都不用算了。
只有当手机返回值为1时才能造出手机。而且在当前这块中复制出的手机,在下一块中才能造出其他的手机。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cmath>
#define LL long long
#define MOD 998244353
using namespace std;
char s[5];
int num[100009],cnt,n;
queue <int> q;
int main()
{
scanf("%d",&n);
int c=1;
for(int i=1;i<n;i++)
{
scanf("%s",s);
if(s[0]=='|') num[++cnt]=c,c=1;
else c++;
}
num[++cnt]=c;
LL now=1,ans=1;
for(int i=1;i<=cnt;i++)
{
now=(now*num[i])%MOD;
ans=(ans+now)%MOD;
}
printf("%lld",ans);
return 0;
}