poj 1363 Rails

#include<iostream>   
#include
<stack>
using namespace std;
int n,target[1001],temp;
int main()
{
while(cin >> n&&n)
{
while(cin >> temp&&temp)
{
stack
<int> s;
int A = 1,B = 1; //A是有顺序的车厢号,B是栈堆指针
target[1] = temp;
for(int i = 2;i <= n;++i)
{
cin
>> target[i];//目标数组
}
int ok = 1;
while(B <= n)
{
if(A == target[B])//如果第一节车厢就与目标相同,满足条件
{
A
++;
B
++;
}
else if(!s.empty() && s.top() == target[B])//如果栈堆非空且栈顶与目标相同,满足条件
{
s.pop();
//将栈顶元素丢弃
B++;//指针++
}
else if(A <= n)//如果上述两条件均不满足但车厢号仍然小于N,则将其放入栈堆中
s.push(A++);
else //上述条件无一成立,则不可能满足目标数组
{
ok
= 0;
break;
}
}
if(ok)
cout
<< "Yes" <<endl;
else
cout
<< "No" <<endl;
}
cout
<< endl;
}
return 0;
}
//sample:初始进栈数列都是默认为 1,2,3,4,5,6...,通过序列 1 2 3 4 5... 进行栈操作,如果能转换成target数组,就是yes
//比如sample中第一个例子,初始进栈数列默认为 1,2,3,4,5
//分别输入两组target数组:(1)1 2 3 4 5 输出yes (2) 5 4 1 2 3 输出no 输入0,表示结束这一组测试数据

  

posted on 2011-07-18 00:01  sysu_mjc  阅读(144)  评论(0编辑  收藏  举报

导航