求助!!

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

123456roc @ 2021-10-16 19:00:21

#include<iostream>
#include<stack>
using namespace std;
int a[100001];
int b[100001];
int main()
{
    int q;
    int n;
    cin>>q;
    while(q--)
    {
        cin>>n;
        stack<int> s;
        for(int i=1;i<=n;i++)
          cin>>a[i];
        for(int i=1;i<=n;i++)
          cin>>b[i];
        int num=1;
        for(int i=1;i<=n;i++)
        {
            s.push(a[i]);
            while((s.top()==b[num])&&!s.empty())//为什么这里不能结束循环呢 
            {
                num++;
                s.pop();
                //if(s.empty())  break;  这样却可以  
            }
        }
        if(!s.size())
          cout<<"Yes"<<endl;
        else
          cout<<"No"<<endl;
    }
    return 0;
}

by DaShaber @ 2021-10-16 19:01:31

@123456roc 先判 !s.empty(),再判 s.top()==b[num] 试试?


by 123456roc @ 2021-10-16 19:03:30

@tzc_2012_awa 真的可以,为什么呢??


by DaShaber @ 2021-10-16 19:04:49

@123456roc 调用 s.top() 前应保证栈非空


by 123456roc @ 2021-10-16 19:06:40

@tzc_2012_awa && 运算符两边判断时会有先后顺序吗


by DaShaber @ 2021-10-16 19:09:44

有,并且所有逻辑运算符都有

#include<bits/stdc++.h>
using namespace std;
signed main(){
    int res=0;
    if(0&&res++) ;
    if(1||res++) ;
    cout<<res;
    return 0;
}

以上代码输出 0


by 123456roc @ 2021-10-16 19:11:27

@tzc_2012_awa 知道了,知道了,多谢!!


by Kzping @ 2021-10-28 18:04:08

这道题中&&两边的判断先后为什么会有区别?


|