HenryQ2022 @ 2023-08-27 19:55:05
#include <iostream>
#include <stack>
using namespace std;
int n, m;
int a[100010], b[100010];
stack<int> st;
int main() {
cin >> n;
for(int aa = 1;aa <= n;aa++) {
cin >> m;
for(int i = 1;i <= m;i++)
cin >> a[i];
for(int i = 1;i <= m;i++)
cin >> b[i];
int cur = 1;
for(int i = 1;i <= m;i++) {
st.push(a[i]);
while(st.size() != 0 && st.top() == b[cur]) {
cur++;
st.pop();
}
}
if(st.size() != 0)
cout << "No" << endl;
else
cout << "Yes" << endl;
}
return 0;
}
如果你把栈定义在aa循环里,那本讨论
如果你大概是这样写的,就WA。
为什么呢?
因为我们要每次循环栈里需要非常的干净
但aa 循环到第二次的时候,栈里的值 是 上一次计算的值,所以需要在28-29之间插入清空栈的代码!
本juruo在这里被坑了
仔细想想,其实上面 栈还有值 的情况仅仅会在输出为"No"的时候
附加评测
20pts(没有清空栈)