救救孩子吧,一直过不了,不知道哪里错了

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

fufuQAQ @ 2022-03-01 23:46:29

#include<bits/stdc++.h>
#include<stack>
using namespace std;
const int N=100010; 
//stack<int> x; 
int a[N],b[N];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
       stack<int> x; 
       int n;
       cin>>n;
       for(int i=0;i<n;i++)
       {
            cin>>a[i];
            x.push(a[i]);
        }

        for(int i=0;i<n;i++)
            cin>>b[i];
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(x.top()==b[i])
            {
                ans++;
                x.pop();
            }
            if(x.size()==0) break;
        } 
        if(x.size()) cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
        while(!x.empty())
          x.pop();//清空栈 
//      
//      if(ans==n)
//        cout<<"Yes"<<endl;
//      else 
//        cout<<"No"<<endl;
    }   
    return 0;

} 

by AC_CSP @ 2022-03-02 07:44:12

for(int i=0;i<n;i++)
        {
            if(x.top()==b[i])
            {
                ans++;
                x.pop();
            }
            if(x.size()==0) break;
        } 

这段代码你这个按照你抄的题解的说法

b数组下标独自算,并不是i

回去看看


by 编码落寞 @ 2022-03-02 08:27:24

@zhejianguniversity

你这种写法的出栈顺序只能是从顶部到底。没有中间出栈的情况。


by _8762 @ 2022-03-02 10:55:27

其实自己造几个数据然后模拟一下就好了,为什么会一直不知道自己哪错了


|