hdu 1274 展开字符串 (简单dfs)

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

思路: 找到匹配的区间 之后dfs

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
char str[300];
void dfs(int l,int r)
{
    int i,j,k;
    int tl,tr,coun;
    for(i=l;i<=r;i++)
    {
        if(str[i]<=‘9‘&&str[i]>=‘0‘)
        {
            coun=str[i]-‘0‘;
            tr=tl=i+1;
            if(str[tl]==‘(‘)
            {
              int tcnt=1;
              for(j=tl+1;j<=r;j++)
              {
                if(str[j]==‘(‘) tcnt++;
                else if(str[j]==‘)‘) tcnt--;
                if(tcnt==0) {tr=j;break;}
              }
            }
            for(j=1;j<=coun;j++)
            {
                dfs(tl,tr);
                i=tr; continue;
            }
        }
        else if(str[i]<=‘z‘&&str[i]>=‘a‘)
        {
            printf("%c",str[i]);
        }
    }
}
int main()
{
    int n;
    int i,j,k;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",str);
        int len=strlen(str);
        dfs(0,len-1);
        printf("\n");
    }
    return 0;
}

时间: 2024-11-09 00:59:57

hdu 1274 展开字符串 (简单dfs)的相关文章

HDU 1274 展开字符串 (递归+string类)

题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<stdio.h> #include<iostream> #include<string.h> #include<string> using namespace std; char str[300]; bool vis[300]; int len; string dfs(i

HDU 1274 展开字符串

在纺织CAD系统开发过程中,经常会遇到纱线排列的问题. 该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc表示三根纱线的排列:重复可以用数字和括号表示,例如:2(abc)表示abcabc:1(a)=1a表示a;2ab表示aab;如果括号前面没有表示重复的数字出现,则就可认为是1被省略了,如:cd(abc)=cd1(abc)=cdabc;这种表示方法非常简单紧凑,也易于理解:但是计算机却不能理解.为了使计算机接受,就必须将简单紧凑的表达方式展

杭电acm 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): 3355    Accepted Submission(s): 1619 Problem Description 在纺织CAD系统开发过程中,经常会遇到纱线排列的问题.该问题

HDU 5305 Friends(简单DFS)

Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 878    Accepted Submission(s): 422 Problem Description There are n people and m pairs of friends. For every pair of friends, they can cho

【HDOJ】1274 展开字符串

栈的应用,需要注意括号前可能没有数字的情况. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 #include <stack> 6 #include <string> 7 using namespace std; 8 9 #define MAXN 300 10 #define isdigit(c) (c>=

hdu 1016 Prime Ring Problem (简单DFS)

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 25700    Accepted Submission(s): 11453 Problem Description A ring is compose of n circles as shown in diagram. Put natural numb

hdu 4739Zhuge Liang&#39;s Mines(简单dfs,需要注意重点)

Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1166    Accepted Submission(s): 505 Problem Description In the ancient three kingdom period, Zhuge Liang was the most famous

HDU 1501 Zipper(DP,DFS)

题意  判断能否由字符串a,b中的字符不改变各自的相对顺序组合得到字符串c 本题有两种解法  DP或者DFS 考虑DP  令d[i][j]表示能否有a的前i个字符和b的前j个字符组合得到c的前i+j个字符  值为0或者1  那么有d[i][j]=(d[i-1][j]&&a[i]==c[i+j])||(d[i][j-1]&&b[i]==c[i+j])   a,b的下标都是从1开始的  注意0的初始化 #include<cstdio> #include<cst

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

题意:查找这样的子回文字符串(未必连续,但是有从左向右的顺序)个数. 简单的区间dp,哎,以为很神奇的东西,其实也是dp,只是参数改为区间,没做过此类型的题,想不到用dp,以后就 知道了,若已经知道[0,i],推[0,i+1], 显然还要从i+1 处往回找,dp方程也简单: dp[j][i]=(dp[j+1][i]+dp[j][i-1]+10007-dp[j+1][i-1])%10007; 减去中间一段重复的 if(s[i]==s[j])dp[j][i]=(dp[j][i]+dp[j+1][i-