HDU-1274 展开字符串
该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列;重复可以用数字和括号表示,例如:2(abc)表示abcabc;1(a)=1a表示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1(abc)=cdabc;这种表示方法非常简单紧凑,也易于理解;但是计算机却不能理解。为了使计算机接受,就必须将简单紧凑的表达方式展开。某ACM队接受了此项任务。现在你就是该ACM队的一员,请你把这个程序编写完成。
已知条件:输入的简单紧凑表达方式的长度不超过250个字符;括号前表示重复的数不超过1000;不会出现除了数字、括号、小写字母以外的任何其他字符;不会出现括号不配对等错误的情况(错误处理已由ACM其他队员完成了)。
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 展开字符串相关推荐
- HDOJ 1274 展开字符串
复杂的递归... 展开字符串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 展开字符串(dfs)
展开字符串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU1274 展开字符串【文本处理】
展开字符串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- HDU——1013(字符串+数学)Digital Roots
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1013 题意:给你一个整数列表,让位数上的数相加得到一个新的数,若为个位数则输出,若不为个位数重复此操作 ...
- HDU-2112 HDU Today (字符串转数字,最短路)
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...
- hdu 4632 子字符串统计的区间dp
题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[ ...
- HDU - 4821 String(字符串哈希+优化)
题目链接:点击查看 题目大意:给出一个m和l,还有一个字符串,问在s中所有长度为m*l的连续子字符串中,有多少个满足条件的子字符串 这里的满足条件指的是,长度为m*l的子字符串,可以分成m个长度为l的 ...
- hdu 1159(DP+字符串最长公共序列)
http://blog.csdn.net/a_eagle/article/details/7213236 公共序列可以用一个二维数组dp[i][j]保存每个点时的最大数字,本质就是一个双向比较. dp ...
- 魔法串 HDU - 4545(字符串dp)
小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小明的串和小西的变成同一个,那么他们两个人都会很开心 ...
最新文章
- 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!...
- 8086的两种工作模式_Buck变换器工作原理
- JAVA 遍历文件夹下的所有文件
- 《硅谷之火》书评:时代变迁中的硅谷摇滚明星
- PHP 导出excel合并相同数据单元格
- python 会议室预约系统解决方案_智能会议预约系统解决方案
- 讲解NPN与PNP三极管做开关管使用方法与计算
- 西门子1500和300哪个贵_西门子s71500与s7300的区别
- 人人5功盖世时候,我在支持国产
- proe常用c语言语句,Proe如何使用if条件语句?
- ansible dnf模块详解
- 计算机数学英语考本的分数线,专接本考试数学英语的成绩没有过公共线还有没有被..._公共英语考试_帮考网...
- 六度空间 (bfs,广度优先)
- Kx 系统与国信证券签定 OEM 合作协议
- 0x00000000该内存不能为read
- 读《创造高收益的阿米巴模式》理解阿米巴的核心
- HDU - 1982 Kaitou Kid - The Phantom Thief
- 基于Aidlux的人体识别、人体追踪与人数统计获取
- 计算机导论免费阅读 小说,计算机导论第二章.ppt
- Unity模拟群聚行为 Boids 鸟群、鱼群