题目描述
输入样例
7 5 3
7 6 1 3 2 5 4
3 1 5 4 2 6 7
7 6 5 4 3 2 1
输出样例
YES
NO
NO
思路
判断出栈顺序,具体做法如下:
判断当前瓶子是否装着需要的颜色
1.是,当货架上有瓶子时,不断判断货架顶部是不是我们需要的颜色,直到货架为空,或者货架顶端不是我们需要的颜色
2.不是,则将该瓶子放到货架上,并判断是否超出货架最大容量
AC代码
#include <iostream>
using namespace std;
const int N = 1010;
int h[N];
int tt;
int main()
{
int n, m, k, id;
cin >> n >> m >> k;
while(k --)
{
int pos = 1; //当前需要的颜色下标
tt = -1; //数组模拟栈
bool flag = true;
for(int i = 0; i < n; i ++)
{
cin >> id;
if(id == pos) //当前输入的颜色是我们需要的
{
pos ++;
while(tt != -1 && h[tt] == pos) //判断栈顶是不是我们需要的
{
tt --;
pos ++;
}
}
else h[++ tt] = id; //当前输入的颜色不是我们需要的
if(tt + 1 > m) flag = false; //这里不能break,因为我们还没有输入完
}
while(tt != -1 && h[tt] == pos) //当所有颜色输入完成后,不断取出栈中的元素,判断最后栈是否为空
{
pos ++;
tt --;
}
if(tt != -1) flag = false;
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
欢迎大家批评指正!!!