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
这道题中&&两边的判断先后为什么会有区别?