此题好像是浙大数据结构慕课上面的课后编程作业。
思路是模拟栈的运行。每读一个数,就将他和当前栈顶的数比较,如果不相等,就从1开始往栈里push,直到当前栈顶元素和当前所读元素相等,相当于当前所读元素匹配成功。匹配成功后,就弹出栈顶元素,读下一个元素。
设置一个flag来标识匹配不成功的情况
- 当push到栈里的数超过了序列长度,即如果序列长度为7,那么你只能将1~7push进栈。
- stack的size超过了限制。
代码如下:
#include<iostream>
#include<stack>
using namespace std;
int main() {
int m, n, k;
cin >> m >> n >> k;
for (int i = 0; i < k; i++){
stack<int> s;
int temp;
int count = 1;
bool flag = true;
for (int j = 0; j < n; j++) {
cin >> temp;
while (s.empty() || s.top() != temp) {
if (count > n) {
flag = false;
break;
}else s.push(count++);
if (s.size() > m) {
flag = false;
break;
}
}
if (s.top() == temp) s.pop();
}
if (s.empty() && flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}