HDU 1022Train Problem I

       鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1022

     題意很好理解,拿到手很容易可以看出是棧的應用。最近開始看數據結構,然後首先就是棧與隊列,所以這是我ACM路途中的第一道STL的題目,看過小白書的人都肯定一眼就會做。可是本人很水,沒有一遍過,在寫的時候清空棧的時候本來是應該用循環來清空,結果光用了個if語句,害的WA好幾遍。。。【掩面】哎,只能說繼續努力吧,趁自己現在激情滿滿。。。

 

      代碼:

#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;

int main()
{
	int n,i,flag[2000];//flag[i]標記出入棧
	char in[1000],out[1000];
	stack<char>s;
	while(scanf("%d",&n)!=EOF)
	{
		getchar();
		scanf("%s%s",in,out);

		int Ao=0,Bi=0;//Ao表示出棧的號,Bi表示進棧的號
		i=0;
		while(1)
		{
			if(!s.empty()) //先清棧
				s.pop();
			else
				break;
		}
		while(Bi<n)
		{
			while(s.empty()||s.top()!=out[Ao])//進棧
			{
				s.push(in[Bi++]);
				flag[i++]=1;
				if(Bi>=n)
					break;
			}
			while(!s.empty()&&s.top()==out[Ao])//出棧
			{
				s.pop();//拋棄s.top()中的元素
				Ao++;
				flag[i++]=0;
			}
		}
		if(Ao>=n)
		{
			printf("Yes.\n");
			for(int j=0;j<i;j++)
			{
				if(flag[j]==1)
					printf("in\n");
				if(flag[j]==0)
					printf("out\n");
			}
		}

		else
			printf("No.\n");
		printf("FINISH\n");
	}
	return 0;
}




 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章