Gril @ 2022-10-16 06:51:18
代码如下
#include<bits/stdc++.h>
#define Y "Yes"
#define N "No"
using namespace std;
int q;
int main()
{
//s1输入,s3目标结果,s2中间栈
stack<int> s1,s2,s3;
cin >> q;
for(int i = 1;i <= q;i++)
{
int n = 0;
cin >> n;
for(int j = 1; j <= n;j++)
{
int t = 0;
cin >> t;
s1.push(t);
}
for(int j = 1;j <= n;j++)
{
int t = 0;
cin >> t;
s3.push(t);
}
while(1)
{
//目标结果栈为空则成功
if(s3.empty()){ cout << Y << endl; break; }
int t = 0;
if(!s1.empty())
{
t = s1.top();
s2.push(s1.top());
s1.pop();
}
if(!s2.empty())
{
if(s1.empty())
{
//若输入栈空,中间栈顶不等于目标栈顶,就等于失败了
if(s2.top() != s3.top())
{
cout << N << endl;
break;
}
}
if(s2.top() == s3.top())
{
s3.pop();
s2.pop();
}
}
}
}
return 0;
}
by Gril @ 2022-10-16 06:53:39
我觉得我思路没问题
by Gril @ 2022-10-16 07:13:39
思路就是通过一个中间栈,然后不断把s1(输入栈)栈顶元素pop,把它push进s2(中间栈),然后判断s2的top和s3的top是否相同,相同就两个一起pop(删除栈顶元素)。直到s3为空则"Yes"。当s1为空可s2和s3的栈顶不同为"No"。
by Ted_Algorithm @ 2022-11-04 14:49:39
你试下这组hack数组,大概就会知道你的思路问题出在哪里了
/*
1
5
1 2 3 4 5
3 2 1 5 4
*/