zoj 1259 || poj 1363 rails(栈)

题意:


英语真心不行啊,看了n久看不出是什么回事。数据太多也猜不到。囧.......

给出一个N,问按照1~N的顺序入站的能否按照给定的序列出站。接下来的0是为了换一个N,再来一个0是跳出程序。Orz。


 分析:

简单的数据结构,但我改了很久才大概的写出来,然后改错改了好久。测试了n组数据,都不行,和老师商量下,给出个321和312 发现一开始321可以后来321就不行了,偶觉得应该是初始化问题吧,就去找flag,发现不是,最后 我了个去 ,又死在了没有清空上。。。。栈没有清空,悲剧啊,交了,果断ac。

>_<,但我写的很长,意思也就这样了(改了良久)、先把数入栈判断与a[i],相等否,相等的话出栈,i++,不想等的话push,直到全部压进,再出来只要有一个在出来时不相等就是不符合情况的。


#include <iostream>
#include <stack>
#include <cstdio>
using namespace std;
int main()
{
	int N;
	stack<int > pp;
	int i,j,top;
	int a[1005];
	while(~scanf("%d",&N))
	{
		if(N==0) break;
		while(~scanf("%d",&a[1]))
		{
			if(a[1]==0) break;
			for(i=2;i<=N;i++)
				cin>>a[i];
			i=1; 
			while(!pp.empty ()) pp.pop ();
			pp.push (i);
			while(!pp.empty ())
			{
				flag=0;
				for(j=2;j<=N;j++)
				{
					top=pp.top ();
					while(top==a[i])
					{
					
						pp.pop ();
						if(!pp.empty ())
						top=pp.top();
						i++;
					}
					pp.push(j);
				}
				while(1)
				{
					top=pp.top ();
					if(a[i]!=top) break;
					else
					{
						pp.pop();
						i++;
					}
					if(pp.empty ()) break;
				}
				break;
			}
			if(!pp.empty ()) printf("No\n");
			else printf("Yes\n");
		}
		printf("\n");
	}
	return 0;
}



ym简化版的:

http://hi.baidu.com/formygirlss/blog/item/c8b4585caa6a4545fbf2c09c.html


你可能感兴趣的:(数据结构,c,测试,Rails)