POJ_1363_Rails(栈模拟)

来源:互联网 发布:刘燕舞 知乎 编辑:程序博客网 时间:2024/06/01 10:24

题型:模拟

题意:火车车厢以1~n的顺序开进车站,有一个铁轨用于暂时停放车厢,问是否可以按输入的火车顺序开出。

分析:用栈模拟即可。

1、   先用循环将当前车厢编号放入栈中,若遇到符合驶出序号的则弹出top。

2、   然后再将stack再查一遍,有符合的就pop。

3、   最后剩在stack里的元素只能按部就班的乖乖进行比较了,有就pop,木有就break;

注意点:

1、   注意每次开始执行新的数据之前需注意将队列清空。

2、   若有符合的在pop完之后一定要将stack再查一遍。

 

代码:

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<stack>using namespace std;int a[123456],b[123456];int main(){    int n;    stack<int> s;    while(scanf("%d",&n)&&n)    {        while(scanf("%d",&a[0]))        {            if(!a[0])            {                printf("\n");                break;            }            for(int i=1; i<n; i++)            {                scanf("%d",&a[i]);            }            while(!s.empty())            {                s.pop();            }            int j=0;            for(int i=0; i<n; i++)            {                b[i]=i+1;                s.push(b[i]);                if(s.top()==a[j])                {                    s.pop();                    j++;                    while(!s.empty()&&s.top()==a[j])                    {                        s.pop();                        j++;                    }                }            }            while(!s.empty())            {                if(s.top()==a[j])                {                    s.pop();                    j++;                }                else                    break;            }            if(s.size())            {                printf("No\n");            }            else            {                printf("Yes\n");            }        }    }    return 0;}


<pre>