zoukankan      html  css  js  c++  java
  • 栈_uva514

    题干略。

    分析,从A开往C的车一定是按顺序的:1,2,3....,用A表示A站开往B站的车的编号,定义栈C储存C站的车辆编号,车厢进B站的顺序输入后存在数组B[],S为当前是第几节车厢要进B站,初始S=1。

    A从1~n判断,若A==B[S],直接进B站,S++,A++;

                           第一条没有满足时:若C栈不空,判断栈顶与B[S]是否相等,相等的话S++,弹出栈顶元素;

                           前两条都没有满足时:在A站车厢没有全部进B站时,A++,C.push(A);

                           前三条均不满足时:说明A站已空,但是,C栈栈顶元素仍不能进入B站,则该测试样例不能实现。

    代码:

    #include <iostream>
    #include <stack>
    using namespace std;
    
    const int maxn=1000+10;
    
    stack <int> c; 
    
    int main(){
    
        int a,b[maxn],s,ok,n;
    L1:    while(scanf("%d",&n),n){
    L:        cin>>b[1];
            if(b[1]==0) {
            cout<<endl;goto L1;}
            for(int i=2;i<=n;i++){
                cin>>b[i];
            }
            a=ok=s=1;
            while(s<=n){
                if(a==b[s]){ a++;s++;
                }
                else if(!c.empty() && c.top()==b[s]){ s++;c.pop();
                }
                else if(a<=n) { c.push(a++); 
                }
                else { ok=0;break;
                }
            }
            printf("%s
    ",ok?"Yes":"No");
            goto L;
        }
        return 0;
    }
    柳暗花明又一村
  • 相关阅读:
    [转载]c++转python
    [转载]One-hot编码
    [转载]各种机器学习算法的应用场景
    SVC和SVR
    机器学习-正则化+回归与分类辨析
    C#编译时,提示缺少NuGet包
    C++中 左值和右值的区别
    C++11并发编程实战 免费书籍
    静态库和动态库
    C++中string类
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8416674.html
Copyright © 2011-2022 走看看