P4387 洛谷做题笔记 2023/3/13
这道题的关键点在于,在入栈的同时可以完成出栈操作,这就需要在每一次压入时检测是否出栈。
这道题还有一个易错点,就是在每一次询问之后,还必须完成栈的清空,这里有两种做法,一种是逐个pop,另一种是建一个空的栈,把两个栈的内容交换。我采用第二种:
stack<int> T;
T.swap(S);
以下是完整代码:
#include<bits/stdc++.h>
using namespace std;
int q,n,pop[100005],push[100005],x,k,m;
stack<int> S;
int main(){
scanf("%d", &q);
while(q>0){
scanf("%d", &n);
for(int i=0;i<n;i++){
scanf("%d", push+i);
}
for(int i=0;i<n;i++)
scanf("%d", &pop[i]);
while(k<n){
S.push(push[k]);
k++;
while(!S.empty()&&S.top()==pop[m]){
S.pop();
m++;
}
}
if(S.empty()) printf("Yes\n");
else printf("No\n");
k=0,m=0,q--;
stack<int> T;
T.swap(S);
}
return 0;
}
标签:洛谷,int,笔记,做题,2023313,P4387
From: https://www.cnblogs.com/SunnyHanhome/p/17212929.html