AC了,但是有个疑问

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

wangyiqing_DOCX @ 2024-01-31 19:50:38

为什么用手工栈0分,模板栈100分?

手工栈代码:

#include<iostream>
using namespace std;
int T;
int a[100005],b[100005],n,j=1,st[100005],top=0;
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];
        for(int i=1; i<=n; i++) {
            st[++top]=a[i];
            while(st[top]==b[j]) {
                top--;
                j++;
                if(top==0) break;
            }
        }
        if(top==0) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;

        top=0;
        for(int i=1;i<=n;i++){
            a[i]=0;
            st[i]=0;
        }
    }
    return 0;
}

模板栈代码:

#include<iostream>
#include<stack>
using namespace std;
int a[100005],b[100005];
stack<int> st;
int main() {
    int T;
    cin>>T;
    while(T--) {
        int n,j=1;
        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++) {
            st.push(a[i]);
            while(st.top()==b[j]) {
                st.pop();
                j++;
                if(st.empty()) break;
            }
        }
        if(st.empty()) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;

        while(!st.empty()) st.pop();
    }
    return 0;
}

by silent_ST @ 2024-01-31 19:54:18

你手工栈里 j 多测没初始化 吧


by chenlijin01 @ 2024-08-06 10:50:50

你while里面还要判断top!=0


|