题目大意
就是说有一个{1,2,3..,N}{1,2,3..,N}{1,2,3..,N}的队列依次进栈,问出栈的顺序是否可能是题目给出的数列,如果是,输出YesYesYes,如果不是,输出NoNoNo.
题目解析
从A1A_1A1开始,如果栈顶元素小于AiA_iAi,则将AiA_iAi之前的元素都压入栈,如果栈顶元素大于AiA_iAi则输出NoNoNo,如果栈顶元素为AiA_iAi则直接出栈。
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int a[2005];
int main()
{
scanf("%d",&n);
while(n!=0)
{
scanf("%d",&a[1]);
while(a[1]!=0)
{
for(int i=2;i<=n;i++)
scanf("%d",&a[i]);
int bj=1,l=1,r=1,b[2005]={0},cnt=0;
while(r<=n)
{
if(l==a[r]) l++,r++;
else if(cnt&&b[cnt]==a[r]) cnt--,r++;
else if(l<=n) b[++cnt]=l++;
else {bj=0;break;}
}
if(bj) printf("Yes\n");
else printf("No\n");
scanf("%d",&a[1]);
}
printf("\n");
scanf("%d",&n);
}
}