题意:给定两个序列A和一到n的排列B,问能否通过一个栈的push和pop操作使得A变成B。
思路:直接构造一个栈模拟即可,注意换行。
code:
#include <bits/stdc++.h>
using namespace std;
int v[1005],n;
int main()
{
while (~scanf("%d",&n)&&n)
{
while (~scanf("%d",&v[1])&&v[1]){
for (int i=2;i<=n;i++)
scanf("%d",&v[i]);
stack<int>s;
int p=1,k=1;
while (p<=n){
if(!s.empty()&&v[p]==s.top()){
s.pop();
p++;
}else if (v[p]!=k){
s.push(k);
if (++k>n) break;
} else p++,k++;
}
if (p>n) puts("Yes");
else puts("No");
}
puts("");
}
}