求助

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

江户川コナン @ 2021-08-06 22:03:11

求助!过了样例但是全部都是WA

代码:

#include <bits/stdc++.h>
using namespace std;
/*const int maxn=1e5+5;
int s[maxn],a[maxn],b[maxn];
int n,T,cnt=0;
void push(int x){
    s[++cnt]=x;
}
bool y[maxn];
void read(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
    }
    for(int i=1;i<=n;i++){
        /*cout<<b[i]<<endl;
        for(int i=1;i<=cnt;i++){
            cout<<s[i]<<" ";
        }
        cout<<endl;*/
  /*      bool flag=false;
        for(int i=1;i<=cnt;i++){
            if(s[i]==a[i]) {
                flag=true;
                break;
            }
        }
        if(!flag){
            int x=b[i];
            for(int j=1;j<=n;j++){
                if(a[j]==x) break;
                if(!y[j]){
                    push(a[j]);
                    y[j]=true;
                }
            }
            y[i]=true;
        }else{
            if(s[cnt]!=b[i]){
                cout<<"No"<<endl;
                return ;
            }else cnt--;
        }
    }
    cout<<"Yes"<<endl;
}
int main(){
    cin>>T;
    while(T--){
        memset(y,0,sizeof(y));
        read();
    }
    return 0;
}*/
const int maxn=1e5+5;
int a[maxn],b[maxn];
int n,T,cnt=1;
stack<int> s;
void read(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        cin>>b[i];
    }
    for(int i=1;i<=n;i++){
        s.push(a[i]);
        while(s.top()==b[cnt]){
            s.pop();
            cnt++;
            if(s.empty()){
                break;
            }
        }
    }
    if(s.empty()){
        cout<<"Yes"<<endl;
    }else{
        cout<<"No"<<endl;
    }
    while(!s.empty()) s.pop();
}
int main(){
    cin>>T;
    while(T--){
        read();
    }
    return 0;
}

恳请各位大佬/神犇指点迷津


by donghanwen1225 @ 2021-08-06 22:20:36

@江户川コナン 您忘了把cnt清零


|