uva 514 火车

#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
int n, jxt[1100] = {0};
int main()
{
    int ll = 0;
    while(scanf("%d", &n) != EOF && n)
    {
        while(scanf("%d", &jxt[1]) != EOF && jxt[1])
        {
        for(int i = 2; i <= n; i++)
            scanf("%d", &jxt[i]);
        stack<int> s;
        int a = 1, b = 1;
        int flag = 1;
        while(b <= n)
        {
            if(a == jxt[b]) {a++; b++;}//正好符合一进一出时的情境。
            else if(!s.empty() && s.top() == jxt[b]) {s.pop(); b++;}//一串的
            else if(a <= n) s.push(a++);
            else {flag = 0; break;}
        }
        if(flag)
            printf("Yes\n");
        else printf("No\n");
        memset(jxt, 0, sizeof(jxt));
        }
        printf("\n");
    }
}

这个题吧。。。感觉a,b很重要。

可以把b,看作是成题目所给的那些火车序列里实现的火车数目, 当为n时, 即表示成功。

a可以看做成已过的火车,当其数目大于n时, 及失败。

把握好这两点即可。

可实现的火车无非两种情况一个,,一串的,  一个单个进的。。。

猜你喜欢

转载自www.cnblogs.com/jrjxt/p/10353891.html
今日推荐