• 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): 1102    Accepted Submission(s): 495


    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 <stdio.h>
    #include <string.h>
    char sss[260];
    int kh[260];
    int digit(char n)
    {
    	return n>='0'&&n<='9';
    }
    
    void print(int n,int m)
    {
    	int i,j;
    	for(i=n;i<=m;)
    	{
    	    if(digit(sss[i]))
    		{
    			if(sss[i+1]=='(')
    			{
    				for(j=0;j<sss[i]-'0';j++)
    				{
    						print(i+2,kh[i+1]-1);
    						
    				}
    				i=kh[i+1]+1;
    			
    			}
    			else
    			{
    				for(j=0;j<sss[i]-'0';j++)
    				printf("%c",sss[i+1]);
    				i+=2;
    			}
    		}
    		else
    		{
    			if(sss[i]=='(')
    			{
    				print(i+1,kh[i]-1);
    			    i=kh[i]+1;
    			}
    			else
    		    	printf("%c",sss[i++]);	
    		}	
    	}
    }
    int main()
    {
    	int n,i,top;
    	int st[260];
    	scanf("%d",&n);
    	while(n--)
    	{
    		getchar();
    		scanf("%s",sss);
    		top=0;
    		for(i=strlen(sss)-1;i>=0;i--)
    		{
    			if(sss[i]==')')
    			st[top++]=i;
    			else if(sss[i]=='(')
    			{
    				top--;
    				kh[i]=st[top];
    			}
    		}
    		print(0,strlen(sss)-1);
    		printf("
    ");
    	}
    }
    

      

  • 相关阅读:
    CF528D Fuzzy Search
    P3489 付公主的背包
    有标号的DAG计数
    P4609 [FJOI2016]建筑师
    mds/journal.cc: 2929: FAILED assert解决
    Ceph根据Crush位置读取数据
    关于backfill参数建议
    rados put striper功能的调试
    Cephfs的文件存到哪里了
    为什么删除的Ceph对象还能get
  • 原文地址:https://www.cnblogs.com/ccccnzb/p/3419008.html
Copyright © 2020-2023  润新知