#include<bits/stdc++.h>
using namespace std;
int N, M, K;
/*
有一个有序序列A = {1, 2, 3, ..., n}
判断序列B是否是有序序列A的栈混洗
*/
int main() {
cin >> N >> M >> K;
// 每次输入的乱序序列B都能通过一个中间栈进行临时存放,在某个时间出栈可以达到有序序列
for(int i = 0;i < K;++i) {
int now = 1, x, full = false; // 用now来表示有序序列A当前的元素
stack<int> S;
for(int j = 0;j < N;++j) {
cin >> x;
S.push(x);
while(!S.empty() && now == S.top()) { // 是while是因为如果栈中的排列是按照顺序的,那就把他们都出栈
S.pop();
now++;
}
if(S.size() > M) full = true; // 栈溢出(货架不够放了)
}
(!full && !S.size()) ? cout<<"YES\n" : cout<<"NO\n"; // 如果有过货架不够放的情况 或者 临时货架还有货 那就No
}
return 0;
}
【天梯赛L2 栈混洗】L2-032 彩虹瓶 (25 分)
最新推荐文章于 2022-04-22 15:48:21 发布