• 2020牛客寒假算法基础集训营5 C C语言IDE


    https://ac.nowcoder.com/acm/contest/3006/C

    一个事实是我被题面和题解代码吓着了

    事实证明题解做了一个更高难度的版本

    我现在也不知道题解代码在干啥

    事实证明在出题人去掉若干情况后,这道题也不是很难

    只要想做总能啃下来

    这种需要自己构造思路方法的模拟题还是贼好的

    我的思路

    1、#  //  /* */ 这些涵盖的代码内容直接略过

    2、{ } 里面的代码略过

    3、处理这一个‘{’ 与 上一个‘}’之间的代码

         ① 把能去掉的空格都去掉,留下的空格满足后面是字母,前面是字母或者‘*’

         ② 最后一个‘(’与它前面‘ ’之间的内容就是函数类型和函数名。(这里取最后一个是去掉最前面先声明的函数)

         ③ 最后一个‘(’和最后一个‘)’之间的代码,以逗号分割,一个一个提取出来即可

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    
    using namespace std;
    
    char s[5000],a[5000],b[5000],t[5000];
    
    int main()
    {
        bool we=false,st=false,bi=false,br=false,tag;
        int n=0,sum=0,m=0,k,l,r,blank,len,now,last,th,tmp;
        while(scanf("%c",&s[++n])!=EOF);
        for(int i=1;i<=n;++i)
        {
            if(s[i]=='#') we=true;
            else if(s[i]=='/' && s[i+1]=='*') st=true,++i;
            else if(s[i]=='*' && s[i+1]=='/') st=false,++i;
            else if(s[i]=='/' && s[i+1]=='/') bi=true,++i;
            else if(s[i]=='
    ') a[++m]='
    ',we=bi=false;
            else if(we || st || bi) continue;
            else if(s[i]=='{')
            {
                sum++;
                if(sum==1) 
                {
                    br=true;
                    k=0;
                    for(int j=1;j<=m;++j)
                        if(a[j]!=' ') b[++k]=a[j];
                        else if((isalpha(a[j-1]) || a[j-1]=='*') && isalpha(a[j+1])) b[++k]=a[j];
                    b[k+1]='';
                    if(strrchr(b+1,'(')==NULL) continue; 
                    l=strrchr(b+1,'(')-b;
                    blank=len=0;
                    for(int j=l;j && b[j]!='
    ';--j)
                    {
                         t[++len]=b[j];
                         if(b[j]==' ') blank++;
                    }
                    reverse(t+1,t+len+1);
                    last=l;
                    while(strchr(b+last+1,',')!=NULL)
                    {
                        now=strchr(b+last+1,',')-b;
                        tmp=now;
                        while(b[now]!=' ') now--;
                        now--;
                        th=1;
                        t[len+th]=',';
                        for(int j=now;j>last;--j)
                        {
                            ++th;
                            t[len+th]=b[j];
                        }
                        reverse(t+len+1,t+len+th+1);
                        len+=th;
                        last=tmp;
                    }
                    r=strrchr(b+1,')')-b;
                    while(b[r]!=' ') r--;
                    r--;
                    th=0;
                    for(int j=r;j>last;--j)
                    {
                        ++th;
                        t[len+th]=b[j];
                    }
                    reverse(t+len+1,t+len+th+1);
                    len+=th;
                    t[++len]=')';
                    t[len+1]='';
                    printf("%s
    ",t+1);
                    m=0;
                }
            }
            else if(s[i]=='}')
            {
                sum--;
                if(!sum) br=false;
            }
            else if(br) continue;
            else a[++m]=s[i];
        }
    }
  • 相关阅读:
    get和post的区别
    关于webWorker的理解和简单例子
    JavaScript停止事件冒泡和取消事件默认行为
    深入理解js构造函数
    js之yeild
    文件组织方式
    HTML5新增的标签和属性归纳
    css3新增属性
    CSS3 transition介绍
    Mysql安装
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/12357440.html
Copyright © 2020-2023  润新知