求助

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

xuzihao123 @ 2023-07-26 14:23:27

#include <bits/stdc++.h>
using namespace std;
int main(){
    bool s=true;
    int a[100005],b[100005],l,r;
    int n,k,x;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>k;
        s=true;
        for(int j=1;j<=k;j++){
            cin>>a[j];
        }
        for(int j=1;j<=k;j++){
            cin>>b[j];
        }
        l=1;
        r=k;
        while(l<r){
            if(a[l]!=b[r]){
                s=false;
                break;
            }
            l++;
            r--;
        }
        l=1;
        if(s==false){
            while(l<=k){
            if(a[l]!=b[l]){
                s=false;
                break;
            }
            l++;
        }
        }
        if(s==false)cout<<"No";
        if(s==true)cout<<"Yes";
        cout<<endl;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
    } 
}

回复at我一下


by T_TLucas_Yin @ 2023-07-26 20:02:09

@xuzihao123 这题仿佛不必这样,模拟都行

粉丝送你个模拟AC代码罢,记得改改

#include<bits/stdc++.h>
using namespace std;
int t,n,a[100005],b[100005];
int main(){
    cin>>t;
    while(t--){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++) cin>>b[i];
        stack<int> s;
        int k=1;
        for(int i=1;i<=n;i++){
            s.push(a[i]);
            while(!s.empty()&&s.top()==b[k]) k++,s.pop();
        }
        if(s.empty()) cout<<"Yes\n";
        else cout<<"No\n";
    }
    return 0;
}

by xuzihao123 @ 2023-07-26 20:03:40

@T_TLucas_Yin

谢谢


|