论为什么过了样例还是爆零(求助)

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

wweiyuzhao @ 2021-08-29 09:07:18

#include<iostream>
#include<stack>
using namespace std;
stack<int>q;
int n,m,pu[100005],po[100005];
int s; 
bool flag()
{
    for(int i=1;i<=m;i++)
    {
        if(!q.empty()&&q.top()==po[i])
        {
            q.pop();
            continue;
        }
        while(s<=m&&pu[s]!=po[i])
        {
            q.push(pu[s]);
            s++;
        }
        if(s>m)
        {
            return 0;
        }
        s++;
    }
    return 1;
}
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>m;
        for(int i=1;i<=m;i++)
        {
            cin>>pu[i];
        }
        for(int i=1;i<=m;i++)
        {
            cin>>po[i];
        }
        while(!q.empty())
        {
            q.pop();
        }
        if(flag())
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
    }
    return 0;
}

by 缪凌锴_Mathew @ 2021-08-29 09:23:43

int s在flag中数值会被更改,每次flag都应将s设为0


|