HDU 4891 The Great Pan


好无奈的多校啊!!!!!!看着这么复杂的签到题,在前面四个小时都是无视掉的。。。。。。。

题意很难懂有木有!!!!!!!

就是输入一串很长的文章,具体多长我也不清楚!!!判断它有几个意思!!!!

其中有两种情况造成它有多种意思!!!

一、{A|B|C},表示这句话要么是A的意思,要么是B的意思,要么是C的意思,题目保证不会出现相同的意思,

        那么这个就比较好操作,就是统计{}里面有多少个“|”就可以了,意思的种类就是“|”数目加1。

二、$ c a b  $,这句话主要是受到空格的影响导致多种意思,其中有连续多个空格时,不同数量的空格也会造成不同的意思!所以又一个空格就会产生2种意思,两个就会产生3种,以此下去,最后垒乘就行了,其中“\n”不影响空格的连续!!!!

题意懂了,这题就不是很难了,是个复杂点的字符串处理。

由于不清楚输入,我用的是getchar输入。



AC代码如下:


#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;


int main()
{
    ll n;
    char c;
    while(~scanf("%I64d",&n))
    {
        ll dk=0,flag=0,bbj=0;
        ll last1=1,suml,summ,last2=1,bj;
        getchar();
        for(ll i=0;i<n;++i){
            while((c=getchar())!='\n'){
                if(c=='{')
                {
                        dk=1;
                        suml=0;
                }
                if(dk==1)
                {
                    if(c=='|')
                        suml++;
                }
                if(c=='}')
                {
                    dk=0;
                    last1=last1*(suml+1);
                    if(last1>100000)
                        bbj=1;
                }
                if(c=='$'&&flag==0) {flag=1;summ=0;continue;}
                if(flag==1)
                {
                    if(c==' '&&bj==0) {summ=1;bj=1;}
                    else if(c==' '&&bj==1)
                    {
                        summ++;
                    }
                    if(c!=' '&&c!='\n')
                    {
                        last2=last2*(summ+1);
                        summ=0;bj=0;
                    }
                    if(last2>100000)
                        bbj=1;

                }
                if(flag==1&&c=='$') flag=0;
            }
        }
        if(bbj)
            printf("doge\n");
        else
        {
            ll ans = last1 * last2 ;
            if(ans>100000)
                printf("doge\n");
            else printf("%I64d\n",ans);
        }
    }
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值