题目链接 :P4387 【深基15.习9】验证栈序列 - 洛谷 | 计算机科学教育新生态
题目难度 :普及/提高
解题思路:首先这道题很明显是要用栈 来解决的(题目都已经明示了),我们得利用好栈的后进先出的特点来模拟这道题,先读入入栈和出栈序列,然后将遍历入栈序列,边遍历边压入栈,然后与出栈序列比较,匹配成功出栈,直到遍历完入栈序列,最后如果栈不为空则为NO,反之。、
代码部分:
cpp
#include<bits/stdc++.h> // 万能头文件
using namespace std;
typedef long long ll;
const int N = 100010;
int a[N],b[N];
int q;
void sol()
{
int n;
cin >> n;
int t = 1;//计数器
stack<int>stk;
for(int i=1; i<=n; i++) cin >> a[i];//读入入栈序列
for(int j=1; j<=n; j++) cin >> b[j];//读入出栈序列
for(int i=1; i<=n; i++)
{
stk.push(a[i]);//压入栈
while(stk.top() == b[t])//当栈顶元素与b中当前元素相同时出栈
{
stk.pop(),t ++;
if(stk.empty()) break;
}
}
if(stk.empty()) cout<<"Yes"<<'\n';//如果栈为空说明出栈序列b正确
else cout<<"No"<<'\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> q;
while(q--) sol();
return 0;
}