哎呦喂,全WA那叫一个地道

P4387 【深基15.习9】验证栈序列

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;
}

|