用栈模拟过,不过不是朴素的模拟,这方法在lrj的白书上看到的,比我们组队时想到的方法好的多了,而且才30+行。。。
#include <stdio.h>
const int N= 1010;
int n, stack[N], data[N];
int main()
{
while ( scanf("%d", &n), n )
{
while ( scanf("%d", data), data[0] )
{
int i, m= 1, k= 0, top= 0;
for ( i = 1 ; i < n ; i++ )
scanf("%d", data+i);
bool flag= true;
while ( k < n )
{
if ( m == data[k] )
{
m++;
k++;
}
else if ( top && stack[top] == data[k] )
{
top--;
k++;
}
else if ( m < n )
stack[++top] = m++;
else
{
flag= false;
break;
}
}
printf("%s\n", flag?"Yes":"No");
}
putchar(10);
}
return 0;
}