题意:给定两个序列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("");}
}