• Tyvj1053


    题目链接

    分析:
    这道题我觉得比表达式求值还难受

    直接模拟
    在碰到当前位置的下一个位置是‘-’时
    就要考虑展开了

    不必展开的所有情况:

    1.a-a —-> a-a
    -号两边的符号相同
    2.a-b,1-2
    -号两边的符号紧邻
    —-> ab
    —-> 12
    3.a-4,3-b
    两边的符号不同类
    —-> a-4
    —-> 3-b
    4.-号前后也是-
    –9 —-> –9

    展开

    经过重重检验,我们就可以展开了
    先按照p3分成两支
    按照p1再继续细分

    不要忘了判断-号前后的符号既同类又单增

    最后如果-号两边的符号是递减的关系
    直接复制就好: 4-0 —-> 4-0

    tip

    当处理完当前-号之后,指针只能向后移动两位,避免以下情况
    a-b-c —-> abc
    答案数组一定要开够
    我在这里开了1w

    这里写代码片
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    
    using namespace std;
    
    int p1,p2,p3,l;
    char s[100],ans[10000];
    
    void doit(int bh)
    {
        int i,j;
        bool ff=1; 
        if (p3==1)   //正序 
        {
            if (p1==3){   //*
                if (s[bh]>='0'&&s[bh]<='9'&&s[bh+2]<='9'&&s[bh+2]>='0'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh]-'0'+1;j<=s[bh+2]-'0'-1;j++)
                        for (i=1;i<=p2;i++)
                            ans[++l]='*';
                    ff=0;
                }
                else if (s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh]-'a'+1;j<=s[bh+2]-'a'-1;j++)
                        for (i=1;i<=p2;i++)
                            ans[++l]='*';
                    ff=0;
                }
            }
            else{
                if (s[bh]>='0'&&s[bh]<='9'&&s[bh+2]<='9'&&s[bh+2]>='0'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh]-'0'+1;j<=s[bh+2]-'0'-1;j++)
                        for (i=1;i<=p2;i++)
                            ans[++l]='0'+j;
                    ff=0;
                }
                else
                {
                    if (p1==1&&s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                        ans[++l]=s[bh];
                        for (j=s[bh]-'a'+1;j<=s[bh+2]-'a'-1;j++)
                            for (i=1;i<=p2;i++)
                                ans[++l]='a'+j;
                        ff=0;
                    }
                    else
                    if (p1==2&&s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                        ans[++l]=s[bh];
                        for (j=s[bh]-'a'+1;j<=s[bh+2]-'a'-1;j++)
                            for (i=1;i<=p2;i++)
                                ans[++l]='A'+j;
                        ff=0;
                    }
                }
            }   
        }
        else
        {
            if (p1==3){   //*
                if (s[bh]>='0'&&s[bh]<='9'&&s[bh+2]<='9'&&s[bh+2]>='0'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh]-'0'+1;j<=s[bh+2]-'0'-1;j++)
                        for (i=1;i<=p2;i++)
                            ans[++l]='*';
                    ff=0;
                }
                else if (s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh]-'a'+1;j<=s[bh+2]-'a'-1;j++)
                        for (i=1;i<=p2;i++)
                            ans[++l]='*';
                    ff=0;
                }
            }
            else{
                if (s[bh]>='0'&&s[bh]<='9'&&s[bh+2]<='9'&&s[bh+2]>='0'&&s[bh]<s[bh+2]){
                    ans[++l]=s[bh];
                    for (j=s[bh+2]-'0'-1;j>=s[bh]-'0'+1;j--)
                        for (i=1;i<=p2;i++)
                            ans[++l]='0'+j;
                    ff=0;
                }
                else
                {
                    if (p1==1&&s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                        ans[++l]=s[bh];
                        for (j=s[bh+2]-'a'-1;j>=s[bh]-'a'+1;j--)
                            for (i=1;i<=p2;i++)
                                ans[++l]='a'+j;
                        ff=0;
                    }
                    else
                    if (p1==2&&s[bh]>='a'&&s[bh]<='z'&&s[bh+2]<='z'&&s[bh+2]>='a'&&s[bh]<s[bh+2]){
                        ans[++l]=s[bh];
                        for (j=s[bh+2]-'a'-1;j>=s[bh]-'a'+1;j--)
                            for (i=1;i<=p2;i++)
                                ans[++l]='A'+j;
                        ff=0;
                    }
                }
            }   
        }
        if (ff) ans[++l]=s[bh],ans[++l]=s[bh+1];
    }
    
    int main()
    {
        scanf("%d%d%d",&p1,&p2,&p3);
        scanf("%s",&s);
        int i=0,len=strlen(s);
        l=-1;
        while (i<len)
        {
            if (s[i+1]=='-')  //要展开了 
            {
                if (s[i]==s[i+2]){
                    ans[++l]=s[i]; ans[++l]=s[i+1]; i=i+2;
                }
                else if ((int)s[i]==(int)s[i+2]-1){
                    ans[++l]=s[i]; i=i+2;
                }
                else if ((s[i]>='0'&&s[i]<='9'&&s[i+2]>='a'&&s[i+2]<='z')||(s[i+2]>='0'&&s[i+2]<='9'&&s[i]>='a'&&s[i]<='z')){
                    ans[++l]=s[i]; ans[++l]=s[i+1]; i+=2;
                }   
                else if (s[i]==s[i+1]){
                    ans[++l]=s[i]; ans[++l]=s[i+1]; i+=2;
                }
                else if (s[i+1]==s[i+2]){
                    ans[++l]=s[i]; ans[++l]=s[i+1]; ans[++l]=s[i+2]; i+=3;
                }
                else doit(i),i+=2;
            }
            else
            {
                ans[++l]=s[i]; i++;
            }
        }
        printf("%s",ans);
        return 0;
    }
  • 相关阅读:
    Monte Carlo Primer
    MCCCS Towhee: Pressure
    towhee中计算临界温度和密度- 摘自小木虫
    什么是温度?
    Bennett acceptance ratio
    LAMMPS Polydisperse Packings
    科普 [分子力学总势能(或者LJ势能)能量最小化]
    How to make fix rigid/nvt work compatibly with compute temp/com command, or any other alternative options in non-equilibrium simulations.
    WebDriverWait&expected_conditions
    Selenium自动化测试-unittest单元测试框架使用
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673320.html
Copyright © 2020-2023  润新知