这道题就是一个逆向思维。。。每一个需求队列是否可以满足123…n输出。用一个栈可以很轻松的实现。
需要注意的是,空栈调用s.top()会出问题??所以每次先判断是否empty,空的话就先push进去。
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int n;
while(scanf("%d",&n)&&n)
{
int req[n];
while (1)
{
stack<int> s;
scanf("%d",&req[0]);
if(req[0]==0)
{
break;
}
for (int i=1;i<n;i++)
{
scanf("%d",&req[i]);
}
int i=n,j=n-1,ok=1;
while(i)
{
if(s.empty())
{
s.push(req[j]);
}
if(s.top()==i)
{
i--;
s.pop();
}
else
{
if(j>-1)
s.push(req[j--]);
else
{
ok=0;
break;
}
}
}
printf(ok?"Yes\n":"No\n");
}
printf("\n");
}
return 0;
}