20分RE求助!

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

FreindX @ 2024-07-07 10:01:33

大神看看为什么RE

#include<bits/stdc++.h>
using namespace std;
long long n,m,p[100005],pp[100005],q;
int main(){
    cin>>q;
    for(int k=1;k<=q;k++){
        cin>>n;
        stack<long long> z;
        long long s=1;
        for(int i=1;i<=n;i++){
            cin>>p[i];
        }
        for(int i=1;i<=n;i++){
            cin>>pp[i];
        }
        for(int i=1;i<=n;i++){
            while(pp[i]>=p[s]){
                z.push(p[s]);
                if(s==n){
                    break;
                }
                s++;
                //cout<<z.top()<<' ';
            }
            if(z.top()==pp[i]){
                z.pop();
            }
            else{
                break;
            }
        }
        if(z.empty()){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
    }
    return 0;
}

by jikky @ 2024-07-10 09:15:21

#include<bits/stdc++.h>
using namespace std;
long long n,m,p[100005],pp[100005],q;
int main(){
    cin>>q;
    for(int k=1;k<=q;k++){
        cin>>n;
        stack<long long> z;
        long long s=1;
        for(int i=1;i<=n;i++){
            cin>>p[i];
        }
        for(int i=1;i<=n;i++){
            cin>>pp[i];
        }
        for(int i=1;i<=n;i++){
            /*
            z.push(p[i]);
            while(z.top()==pp[s]){
                z.pop();
                s++;
                if(z.empty()){
                    break;
                }
            }
            */
            while(pp[i]>=p[s]){
                z.push(p[s]);
                if(s==n){
                    break;//这里 break只跳出了while,for再循环一次就死循环了 
                }
                s++;
                //cout<<z.top()<<' ';
            }
            if(z.top()==pp[i]){//stack.top()的使用条件是栈不为空,这也是RE的原因 
                z.pop();
            }
            else{
                break;
            }
        }
        if(z.empty()){
            cout<<"Yes"<<endl;
        }
        else{
            cout<<"No"<<endl;
        }
    }
    return 0;
}

|