题目:poj1363
题意:
![](https://i-blog.csdnimg.cn/blog_migrate/cd97ac1d55abb22648bea1fa76d46d45.jpeg)
从A进栈,从B出栈。Station相当与栈,可以容纳任意多节车厢。进栈的顺序是1,2,3。。N.对于给定的出栈顺序,是否真确。是输出"Yes",不是输出"No",
输入的第一行是一个n,后面n行是n个出栈序列。每一块测试数据最后一行一个0,组后一行一个0结束输入。
输出:除了输出yes和no,每一块测试后输出一个空行。
分析:模拟Stack。根据给定的出栈顺序,判断是否可能。
#include <cstdio>
#include <cstdlib>
#include <stack>
#include <iostream>
using namespace std;
int n,f[1005];
void input()
{
for(int i=1;i<n;i++)
scanf("%d",&f[i]);
}
bool stack_test()
{
int temp=1;
stack<int> stk;
for(int i=0;i<n;i++)
{
while(temp<=f[i])//每次模拟进栈
{
stk.push(temp++);
}
int cur=stk.top();//模拟出栈
stk.pop();
if(cur!=f[i])//模拟出栈与给定出栈对比
return false;
}
return true;
}
int main()
{
while(scanf("%d",&n),n)
{
while(scanf("%d",&f[0]),f[0])
{
input();
if(stack_test())
puts("Yes");
else
puts("No");
}
puts("");
}
return 0;
}