题意:
英语真心不行啊,看了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