您的位置:首页 > 大数据 > 人工智能

hdu 1022 Train problem I(栈~~)

2011-11-29 21:02 447 查看
题意:

给定俩个个N长的串,第一个是源,第二个是目标。问能否得到目标序列,能的话再输出序列的进出情况。

分析:

比zoj 1259 稍微复杂点,但题目容易理解多了。。。^_^

输出序列的话,用个数组存下进出情况就ok了。

因为格式问题 ,2Y。

#include <iostream>
#include <stack>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
	int N;
	stack<int > pp;
	int i,j,k,top;
	string str1,str2;
	int a[12],b[12],c[24];
	while(~scanf("%d",&N))
	{
		k=0;
		if(a[1]==0) break;
		memset(c,0,sizeof(c));
		while(!pp.empty ()) pp.pop();//栈的置空啊!!!!
		cin>>str1;
		for(i=0;i<str1.size() ;i++)
			a[i+1]=str1[i]-'0';
		cin>>str2;
		for(i=0;i<str2.size();i++)
			b[i+1]=str2[i]-'0';
		i=1;
		pp.push (a[i]);
		c[k++]=0;
		while(!pp.empty ())
		{
			for(j=2;j<=N;j++)
			{
				top=pp.top ();
				while(top==b[i])
				{
						pp.pop ();
						c[k++]=1;
						if(!pp.empty ())
						top=pp.top();
						i++;			
				}
				pp.push(a[j]);
				c[k++]=0;
			}
			while(1)//出栈
			{
				top=pp.top ();
				if(b[i]!=top) break;
				else
				{
					pp.pop();
					c[k++]=1;
					i++;
				}
				if(pp.empty ()) break;
			}
			break;	
		}
		if(pp.empty ()) 
		{
			cout<<"Yes."<<endl;
			for(i=0;i<2*str1.size ();i++)
			{
				if(c[i]==0) cout<<"in"<<endl;
				else cout<<"out"<<endl;
			}
		}
		else
			cout<<"No."<<endl;
		cout<<"FINISH"<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: