题解 | #Rails#

Rails

https://ac.nowcoder.com/acm/problem/14326

此题底层逻辑就是判断出栈序列是否合理,加上一些细节的处理。

using namespace std;
int n;
bool end(){/*end函数用来接收每一个入栈序列的总数,
若是0则直接跳过循环*/
    cin >> n ;
    if (n) return true;
    else return false;
}
int in[1010];
int main(){
    while (end()){
        int k;
        stack<int> rails;
        cin >> k;/*k用来接收一个入栈序列块里的结束或者继续信号,
        下面while循环末尾也有一个k的cin接收,结合起来作为信号来
        结束一个入栈序列块的判断*/
        while (k) {
            while(!rails.empty()){
                rails.pop();
                }/*清空rails栈,很关键*/
            in[1] = k;/*这里in数组的初始化有一点不一样,因为第一个
            元素作为信号k参与结束判断,所以第一个元素初始化比较特殊*/
            for (int i = 2 ; i <= n ; i ++ ){
                cin >> in[i];
            }
            int j = 1 ;
            for (int i = 1 ; i <= n ; i ++ ){/*这里就是判断入栈后出栈序列的基本模板,需要熟练掌握*/
                rails.push(i);
                while(!rails.empty() && rails.top() == in[j]){
                    rails.pop();
                    j ++ ;
                }
            }
        if (rails.empty()) 
            cout << "Yes" << endl;
        else 
            cout << "No" << endl;
        cin >> k;
        if (k == 0) cout << endl;
       }
    }
    return 0;
}
全部评论

相关推荐

05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务