8

来源:互联网 发布:大学生使用网络 编辑:程序博客网 时间:2024/04/29 07:55

发火又是拖到今天才写……

火车进站,模拟过程是:规定顺序和自然顺序从头到尾比较,相同,同时后移;不同,自然顺序停止,规定顺序和栈顶比较,相同,规定顺序后移,栈下移,跳出,继续从规定顺序和自然顺序的循环;不同,自然顺序入栈,栈顶上移,自然顺序下移,直到规定顺序可以出栈或者栈满。

过程用小样本数据模拟的,半天,循环条件又模拟半天,一天过去了。

#include<stdio.h>
#define N 1002
int a[N],b[N];
int main()
{
    int n,i,j,k;
    while(scanf("%d",&n)!=EOF&&n!=0)
    {
        /*for(i=0;i<n;i++)
        {
            a[i]=0;
            b[i]=0;
        }*/
        while(scanf("%d",&a[1])&&a[1]!=0)
        {
            for(i=2;i<=n;i++)
            {
                scanf("%d",&a[i]);
            }
            i=1;j=1;k=1;
            while((j<=n)&&(i<n+2))
            {
                if(a[j]==i)
                {
                    j++;
                    i++;
                }
                else
                {
                    while(k<n+2)
                    {
                        if(a[j]==b[k-1])
                        {
                            j++;
                            k--;
                            break;
                        }
                        else
                        {
                            b[k]=i;
                            k++;
                            i++;
                        }
                    }
                }
            }
            if(k==1)
            {
                printf("YES\n");
            }
            else
            {
                printf("NO\n");
            }
        }
    }
    return 0;
}

0 0