• HDU 4891 The Great Pan



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

    。。。。。

    题意非常难懂有木有!!

    !!

    !。

    就是输入一串非常长的文章,详细多长我也不清楚!

    。!

    推断它有几个意思。!

    !!

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

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

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

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

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

    因为不清楚输入,我用的是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())!='
    '){
                    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!='
    ')
                        {
                            last2=last2*(summ+1);
                            summ=0;bj=0;
                        }
                        if(last2>100000)
                            bbj=1;
    
                    }
                    if(flag==1&&c=='$') flag=0;
                }
            }
            if(bbj)
                printf("doge
    ");
            else
            {
                ll ans = last1 * last2 ;
                if(ans>100000)
                    printf("doge
    ");
                else printf("%I64d
    ",ans);
            }
        }
        return 0;
    }


  • 相关阅读:
    为什么你不会redis分布式锁?因为你没看到这篇文章
    JavaScript最佳做法—创建对象
    js构造函数的定义
    作用域和闭包
    js中的call()和apply()的区别
    3种方法快速查找两个数组是否在Javascript中包含任何公共项
    JavaScript继承的6种方式以及它们的优缺点
    JS常见的内存泄漏及可用的解决方法
    Vuex简单入门
    如何使用HTML和CSS为背景创建Wave图片?
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6984860.html
Copyright © 2020-2023  润新知