题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 n(n≤100000)。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 Yes
,否则输出 No
。为了防止骗分,每个测试点有多组数据。
输入格式
第一行一个整数 q,询问次数。
接下来 q 个询问,对于每个询问:
第一行一个整数 n 表示序列长度;
第二行 n 个整数表示入栈序列;
第三行 n 个整数表示出栈序列;
输出格式
对于每个询问输出答案。
输入输出样例
输入2 5 1 2 3 4 5 5 4 3 2 1 4 1 2 3 4 2 4 1 3输出
Yes No
通过简单地阅读题目可知,对于给定的入栈序列,验证序列poped是否为入栈序列可能的一个出栈序列
- 入栈(push())
- 是否栈空(empty())
- 访问栈顶(top())
- 出栈(pop())
#include<bits/stdc++.h>
using namespace std;
int main()
{
stack<int>q;
int n,p,tmp=0;
cin>>p;//输入询问的次数
for(int t=p;t>0;t--)
{
cin>>n;
int a[n],b[n];
for(int i=0;i<n;i++)
cin>>a[i];//输入push的数组
for(int j=0;j<n;j++)
cin>>b[j];//输入pop的数组
for(int i=0;i<n;i++)
{
q.push(a[i]);//将push数组存入栈中
while(q.top()==b[tmp])//栈是先进后出,如果相等就删除,不相等就相当于已经不是了
{
q.pop();//相等就删除
tmp++;//一个个相比较
if(q.empty())
break;
}
}
if(q.empty())//如果栈为空就验证成功
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while(!q.empty())
q.pop();
tmp=0;//清空栈
}
return 0;
}
标签:tmp,出栈,验证,--,pop,int,序列,empty From: https://www.cnblogs.com/gsq1/p/17332847.html