• (DFS)展开字符串 -- hdu -- 1274


    http://acm.hdu.edu.cn/showproblem.php?pid=1274

    展开字符串

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 2008    Accepted Submission(s): 957


    Problem Description
    在纺织CAD系统开发过程中,经常会遇到纱线排列的问题。
    该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列;重复可以用数字和括号表示,例如:2(abc)表示abcabc;1(a)=1a表示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1(abc)=cdabc;这种表示方法非常简单紧凑,也易于理解;但是计算机却不能理解。为了使计算机接受,就必须将简单紧凑的表达方式展开。某ACM队接受了此项任务。现在你就是该ACM队的一员,请你把这个程序编写完成。
    已知条件:输入的简单紧凑表达方式的长度不超过250个字符;括号前表示重复的数不超过1000;不会出现除了数字、括号、小写字母以外的任何其他字符;不会出现括号不配对等错误的情况(错误处理已由ACM其他队员完成了)。
     
    Input
    本题有多个测试数据组,第一行输入的就是数据组数N,接着就是N行表达式,表达式是按照前面介绍的意义书写的。
     
    Output
    输出时含有N行,每行对应一个输入的表达式。
     
    Sample Input
    2
    1(1a2b1(ab)1c)
    3(ab2(4ab))
     
    Sample Output
    abbabc
    abaaaabaaaababaaaabaaaababaaaabaaaab
     
    同学说了一下这题,感觉好奇就写了,刚写的时候没思路就看了别人的代码(其实这样不好),一看很容易懂,如果遇到’(‘就让它继续递归,如果遇到‘)’就结束,其余的都是细节方面的问题,看看觉得好水呀!!!可是自己没写过,就是没思路
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    
    using namespace std;
    
    #define N 1100
    
    char s[N];
    
    
    int DFS(int ith)
    {
        int k, e, i;
    
        for( i=ith; s[i] && s[i]!=')'; i++)
        {
            for(k=0; s[i] && (s[i]>='0' && s[i]<='9'); i++)
                    k = k*10 + s[i]-'0';
            if(!k) k = 1;
    
            if(s[i]=='(')
            {
                while(k--)
                 e  = DFS(i+1);
                i = e;
            }
            else
            {
                while(k--)
                    putchar(s[i]);
            }
        }
        if(s[i]==')') return i;
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%s", s);
    
            DFS(0);
            printf("
    ");
        }
        return 0;
    }
    勿忘初心
  • 相关阅读:
    《3D Math Primer for Graphics and Game Development》读书笔记1
    OpenGL学习资料汇总
    [Unity3D]做个小Demo学习Input.touches
    [Unity3D]再次点击以退出程序
    图文详解Unity3D中Material的Tiling和Offset是怎么回事
    自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
    Unity3D核心类型一览
    自制Unity小游戏TankHero-2D(3)开始玩起来
    自制Unity小游戏TankHero-2D(2)制作敌方坦克
  • 原文地址:https://www.cnblogs.com/YY56/p/4876656.html
Copyright © 2020-2023  润新知