#113. 【UER #2】手机的生产

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;
} 
原文地址:https://www.cnblogs.com/dfsac/p/7587817.html