3_14 @ 2024-11-15 15:40:44
样例已过,哪里有问题?
#include<bits/stdc++.h>
#define str to_string
using namespace std;
using ll=long long;
const int MAX=1e5+1;
int q,n,a,b[MAX];
int main(){
cin>>q;
while(q--){
stack<int>q;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a;
q.push(a);
}
for(int i=1;i<=n;i++)cin>>b[i];
bool flag=true;
for(int i=1;i<=n;i++){
if(q.size()!=0&&b[i]==q.top())q.pop();
else{
flag=false;
break;
}
}
if(flag)cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}
by Miss_SGT @ 2024-11-15 15:52:23
AUV,您猜怎么着,您强制钦定了出栈只能在入栈后,真的是盖了帽了
by XYY62012 @ 2024-11-15 15:52:47
没看出来 参考一下我的呢
#include<bits/stdc++.h>
#define N 5000009
using namespace std;
long long q,n;
long long sum=1;
stack <int> s;
int main(){
cin>>q;
for(int i=1;i<=q;i++){
cin>>n;
long long push[N],pop[N];
//输入:
for(int i=1;i<=n;i++)
cin>>push[i];
for(int i=1;i<=n;i++)
cin>>pop[i];//
/*for(int i=1;i<=n;i++){
s.push(push[i]);//把pu[i]入栈
while(pop[sum] == (s.top())) {
//如果 出栈的这个数和栈顶元素相等
s.pop();//将此数出栈
sum++;//判断下一个数
if(s.empty()) break;//判断栈是否为空
}
}*/
for(int i=1;i<=n;i++)
{
s.push(push[i]);//入栈
while((s.top())==pop[sum])//当栈顶元素与b中当前元素相同时出栈
{
s.pop();
sum++;
if(s.empty()) break;//注意这里,第一次RE就因为当栈空时还用了出栈操作,所以要手动结束循环
}
}
if(s.empty())//如果栈为空
//证明可以满足po这样的出栈顺序
cout<<"Yes"<<endl;
else//反之
cout<<"No"<<endl;
while(!s.empty())//把栈清空准备下一次使用
s.pop();
sum=1;
}
return 0;
}