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
AC代码,仅供参考

 1 #include<iostream>2 #include<string>3 #include<stack>4 using namespace std;5 string process(string s)6 {7     string ans;8     stack<char> x;9     for(int i=0;i<s.size();++i)
10     {
11         if(s[i]>='0'&&s[i]<='9'||s[i]=='(')//是数字或左括号,直接入栈。
12             x.push(s[i]);
13         else if(s[i]>='a'&&s[i]<='z')//是字母。
14         {
15             if(x.top()<='9'&&x.top()>='0') //此时栈顶是数字。
16             {
17                 int num=x.top()-'0';
18                 x.pop();
19                 while(num--)
20                     x.push(s[i]);
21             }
22             else               //此时栈顶是左括号或其他字母。
23                 x.push(s[i]);
24         }
25         else if(s[i]==')')//是右括号。
26         {
27             string temp;
28             while(x.top()!='(')
29             {
30                 temp.insert(temp.begin(),x.top());
31                 x.pop();
32             }
33             x.pop();   //弹出左括号。
34             int num;
35             if(x.empty()||!(x.top()>='0'&&x.top()<='9'))//弹出左括号后栈为空,或者栈顶不是数字。
36                 num=1;
37             else
38             {
39                 num=x.top()-'0';//取出栈顶数字。
40                 x.pop();
41             }
42             while(num--)
43             {
44                 for(int j=0;j<temp.size();++j)
45                     x.push(temp[j]);
46             }
47         }
48     }
49     while(!x.empty())
50     {
51         ans.insert(ans.begin(),x.top());
52         x.pop();
53     }
54     return ans;
55 }
56 int main()
57 {
58     int test;
59     string s;
60     cin>>test;
61     while(test--)
62     {
63         cin>>s;
64         cout<<process(s)<<endl;
65     }
66     return 0;
67 }

View Code

转载于:https://www.cnblogs.com/Aa948766160/p/5749751.html

HDU-1274 展开字符串相关推荐

  1. HDOJ 1274 展开字符串

    复杂的递归... 展开字符串 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  2. 展开字符串(dfs)

    展开字符串 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. HDU1274 展开字符串【文本处理】

    展开字符串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  4. HDU——1013(字符串+数学)Digital Roots

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1013 题意:给你一个整数列表,让位数上的数相加得到一个新的数,若为个位数则输出,若不为个位数重复此操作 ...

  5. HDU-2112 HDU Today (字符串转数字,最短路)

    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...

  6. hdu 4632 子字符串统计的区间dp

    题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...

  7. HDU - 4821 String(字符串哈希+优化)

    题目链接:点击查看 题目大意:给出一个m和l,还有一个字符串,问在s中所有长度为m*l的连续子字符串中,有多少个满足条件的子字符串 这里的满足条件指的是,长度为m*l的子字符串,可以分成m个长度为l的 ...

  8. hdu 1159(DP+字符串最长公共序列)

    http://blog.csdn.net/a_eagle/article/details/7213236 公共序列可以用一个二维数组dp[i][j]保存每个点时的最大数字,本质就是一个双向比较. dp ...

  9. 魔法串 HDU - 4545(字符串dp)

    小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小明的串和小西的变成同一个,那么他们两个人都会很开心 ...

最新文章

  1. 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!...
  2. 8086的两种工作模式_Buck变换器工作原理
  3. JAVA 遍历文件夹下的所有文件
  4. 《硅谷之火》书评:时代变迁中的硅谷摇滚明星
  5. PHP 导出excel合并相同数据单元格
  6. python 会议室预约系统解决方案_智能会议预约系统解决方案
  7. 讲解NPN与PNP三极管做开关管使用方法与计算
  8. 西门子1500和300哪个贵_西门子s71500与s7300的区别
  9. 人人5功盖世时候,我在支持国产
  10. proe常用c语言语句,Proe如何使用if条件语句?
  11. ansible dnf模块详解
  12. 计算机数学英语考本的分数线,专接本考试数学英语的成绩没有过公共线还有没有被..._公共英语考试_帮考网...
  13. 六度空间 (bfs,广度优先)
  14. Kx 系统与国信证券签定 OEM 合作协议
  15. 0x00000000该内存不能为read
  16. 读《创造高收益的阿米巴模式》理解阿米巴的核心
  17. HDU - 1982 Kaitou Kid - The Phantom Thief
  18. 基于Aidlux的人体识别、人体追踪与人数统计获取
  19. 计算机导论免费阅读 小说,计算机导论第二章.ppt
  20. Unity模拟群聚行为 Boids 鸟群、鱼群

热门文章

  1. poj2065 SETI
  2. 1.3 图像边缘检测edge函数的用法
  3. matlab程序和程序文件
  4. Python进阶04 函数的参数对应
  5. 3.2.1 造成误差的原因分析
  6. Linux系统编程——基于文件描述符的文件操作(1)
  7. java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...
  8. 十三、IntelliJ IDEA 中的版本控制介绍(下)
  9. jstl fn:replace替换换行符
  10. java中判断Object对象类型