天梯赛_L2-032 彩虹瓶(stl, stack)

团体程序设计天梯赛

L2-032 彩虹瓶

stl中stack的使用。栈底设置哨兵便于编程。模拟时,当货架溢出,输出NO;一轮模拟结束后,如果栈中元素数量大于1,输出NO,否则输出YES.

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n, m, k;
    cin >> n >> m >> k;
    for(int i = 0; i <= k - 1; i++){
        stack<int> s;
        s.push(-1);
        int todo = 1, tocome, flag = 1;
        for(int j = 0; j <= n - 1; j++){
            cin >> tocome;
            if(!flag) continue;    // 判断不可行之后,读完剩余数据
            if(tocome == todo){
                todo++;
                while(s.top() == todo){
                    s.pop();
                    todo++;
                }
            }
            else{
                s.push(tocome);
                if((int)s.size() > m + 1){
                    cout << "NO" << endl;
                    flag = 0;
                }
            }
        }
        if(flag){
            if((int)s.size() == 1) cout << "YES" << endl;
            else cout << "NO" << endl;
        } 
    }
    return 0;
}