zoukankan      html  css  js  c++  java
  • 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];
        }
    }
  • 相关阅读:
    Nim or not Nim? hdu3032 SG值打表找规律
    Maximum 贪心
    The Super Powers
    LCM Cardinality 暴力
    Longge's problem poj2480 欧拉函数,gcd
    GCD hdu2588
    Perfect Pth Powers poj1730
    6656 Watching the Kangaroo
    yield 小用
    wpf DropDownButton 源码
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/12357440.html
Copyright © 2011-2022 走看看