首页 > 其他分享 >hdu-1515

hdu-1515

时间:2023-03-03 13:03:17浏览次数:31  
标签:hdu 出栈 int dfs char 1515 include 1000

dfs 

题意:给你两个字符串,问:第一个字符串按入栈出栈规则,能否达到第二个字符串,输出所有的方法,i表示入栈,o表示出栈。

用dfs模拟第一个字符串入栈出栈过程:

1. 当前字符入栈,就向下一层递归,即搜向下一个字符

2. 栈顶元素出栈,对新的栈顶元素判断

注意回溯的条件


#include<stdio.h>    
#include<iostream>    
#include<math.h>    
#include<stdlib.h>    
#include<ctype.h>    
#include<algorithm>    
#include<vector>    
#include<string.h>    
#include<queue>    
#include<stack>    
#include<set>    
#include<map>    
#include<sstream>    
#include<time.h>    
#include<utility>    
#include<malloc.h>    
#include<stdexcept>    

using namespace std;

char a[1000], b[1000];
char str1[1000], str2[1000];
char ans[1000];

stack<char> q;

int l1,l2;

void dfs(int cur1,int cur2,int k)
{
	if (cur2 == l1)
	{
		for(int i=0;i < k;i++)
		{
			cout<<ans[i]<<" ";
		}
		cout<<endl;
		return ;
	}

	if (cur1 < l1)
	{
		ans[k] = 'i';
		q.push(a[cur1]);
		dfs (cur1+1,cur2,k+1);
		q.pop();
	}

	if (!q.empty() && q.top() == b[cur2])
	{
		ans[k] = 'o';
		char c = q.top();
		q.pop();
		dfs(cur1,cur2+1,k+1);
		q.push( c );
	}
}

int main()
{
	while (scanf("%s %s",a,b)!=EOF)
	{
		while (!q.empty())
		{
			q.pop();
		}
		int ok = 1;

		l1 = strlen(a);
	    l2 = strlen(b);

		if (l1 != l2)
		{
			ok = 0;
		}
		
		strcpy(str1,a);
		strcpy(str2,b);

		sort(str1, str1 + l1);
		sort(str2, str2 + l2);

		if (strcmp(str1, str2) != 0)
			ok = 0;
		if (!ok)
		{
			printf("[\n]\n");
		}
		else
		{
			printf("[\n");
			
			dfs(0,0,0);

			printf("]\n");
		}
	}
	return 0;
}





标签:hdu,出栈,int,dfs,char,1515,include,1000
From: https://blog.51cto.com/u_15990681/6098475

相关文章

  • hdu-1548
    搜索做着做着成最短路径了。。dij本层可以直接到达的层数距离为1否则为无穷大#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#includ......
  • hdu-1253
    http://acm.hdu.edu.cn/showproblem.php?pid=1253这道水题#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<......
  • hdu-2821
    http://acm.hdu.edu.cn/showproblem.php?pid=2821不要被题目吓到,认真读题还是好理解的#include<stdio.h>#include<iostream>#include<string.h>#include<math.h......
  • HDU-5112-A Curious Matt (2014ACM/ICPC北京赛区现场赛A题!)
    http://acm.hdu.edu.cn/showproblem.php?pid=5112排序之后计算就好开始用cin超时了#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#......
  • hdu-5122
    http://acm.hdu.edu.cn/showproblem.php?pid=5122简单题#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#include<ctype.h>#include......
  • HDUOJ 2041-2055
    2041超级楼梯ProblemDescription有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input输入数据首先包含一个整数N,表示测试实......
  • Problem C HDU - 5687
    现在有个字典要支持一下操作 1、insert:往神奇字典中插入一个单词  2、delete:在神奇字典中删除所有前缀等于给定字符串的单词  3、search:查询是否在神奇......
  • 统计难题 HDU - 1251
     给一些字符串,问以某个串为前缀的串有几个 #include<iostream>#include<algorithm>#include<cstring>usingnamespacestd;constintN=5e5+4;charnum[80]......
  • Reading comprehension HDU - 4990
    ans=0;   for(i=1;i<=n;i++)    {     if(i&1)ans=(ans*2+1)%m;     elseans=ans*2%m;    } ......
  • HDU 4081 Qin Shi Huang's National Road System(次小树,4级)
    A- QinShiHuang'sNationalRoadSystemTimeLimit:1000MS     MemoryLimit:32768KB     64bitIOFormat:%I64d&%I64uSubmit ​​Status​​......