天梯赛题目集
L2-032 彩虹瓶
题意解析
这个题目应该主要是想考察使用 栈 这一数据结构的,如果想到栈的话,那也就没有什么难的啦。
思路剖析
如果当前工厂的发货的编号不是我们想要的哪一个,就把这个编号推到栈里面。其他情况呢?这里注意,这里其实情况要稍微复杂一点的,假如工厂里面发货编号就是我们想要的,那么我们把这个货物放在对应的位置,但是放完之后,还要考虑到是否此时栈里面的 top元素编号是满足条件的。
最后,如果栈为空,说明可以完成任务,如果栈不为空,说明是无法完成任务的。同时,这里再补充一点就是,要考虑到栈满的情况,可以思考一下如何解决?
Code
#include<iostream>
#include<stack>
using namespace std;
bool Process(int N, int M) {
stack<int> foods;
int count = 1;
bool isFull = false;
for (int i = 0; i < N; ++i) {
int num;
cin >> num;
if (num != count) {
foods.push(num);
if (foods.size() > M) {
isFull = true;
}
} else {
++count;
while (!foods.empty() && !isFull && foods.top() == count) {
foods.pop();
++count;
}
}
}
return foods.empty();
}
int main() {
int N, M, K;
cin >> N >> M >> K;
for (int i = 0; i < K; ++i) {
bool result = Process(N, M);
cout << (result ? "YES\n" : "NO\n");
}
return 0;
}