hdoj.1274 展开字符串【递归】 2015/05/15
来源:互联网 发布:卡盟官网源码带后台 编辑:程序博客网 时间:2024/06/05 09:38
展开字符串
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1858 Accepted Submission(s): 885
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其他队员完成了)。
该问题的描述是这样的:常用纱线的品种一般不会超过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
21(1a2b1(ab)1c)3(ab2(4ab))
Sample Output
abbabcabaaaabaaaababaaaabaaaababaaaabaaaab
Author
Cai Minglun
Source
杭电ACM集训队训练赛(VI)
#include<iostream>#include<cstring>using namespace std;int t,len;char s[300];int kuohao[300],stack[300];void Printf(int i){ if( i >= len ) return; if( s[i] >= '0' && s[i] <= '9' ){ int m = s[i++] - '0'; while( s[i] >= '0' && s[i] <= '9' ){ m *= 10; m += ( s[i++] - '0' ); } if( s[i] == '(' ){ while(m--){ Printf(i+1); } i = kuohao[i]; Printf(i+1); } else{ while(m--) cout<<s[i]; Printf(i+1); } } else if( s[i] == '(' ){ Printf(i+1); } else if( s[i] == ')' ) return; else{ cout<<s[i]; Printf(i+1); }}int main(){ cin>>t; while(t--){ cin>>s; len = strlen (s); memset(kuohao,0,sizeof(kuohao)); int k = 0; for( int i = 0 ; i < len ; ++i ){ if( s[i] == '(' ){ stack[k++] = i; } if( s[i] == ')' ){ kuohao[stack[--k]] = i; } } Printf(0); cout<<endl; } return 0;}注:递归思想,遇到括号就进入括号,记录每对括号在字符串中的位置,不然,递归跳出的时候会出错
0 0
- hdoj.1274 展开字符串【递归】 2015/05/15
- hdoj 展开字符串 1274 (字符串递归) 好题
- HDOJ 1274 展开字符串
- hdoj 1274 展开字符串(递归,栈的应用)
- 字符串展开(递归)hdu 1274
- HDU 1274 展开字符串(递归)
- hdu1274展开字符串(递归)
- HDU 1274 展开字符串 (递归+string类)
- hdu1274 展开字符串(递归or栈)
- HDU 1274 展开字符串
- HDU 1274(展开字符串)
- HDU 1274 展开字符串
- HDU 1274(展开字符串)
- hdu 1274 展开字符串
- HDU 1274 展开字符串
- hdu 1274 展开字符串
- hdu 1274 展开字符串
- hdu 1274 展开字符串
- iOS OpenGL基础
- 17--黑马程序员--基础加强之泛型
- vi使用
- 【linux驱动】linux驱动总览
- POJ 1157 解题报告
- hdoj.1274 展开字符串【递归】 2015/05/15
- Interlocked系列函数线程同步的缺陷
- 黑马程序员---IO流(一)
- 数据结构--利用栈判断括号匹配
- mysql 用指定ID号排序输出结果
- MFC:TabCtrl使用教程
- 四线电阻触摸屏采样滤波算法C语言代码
- 委托实现音乐播放器 | 委托实现音乐播放器的缺点 | 事件实现音乐播放器
- vim入门使用与配置