现在的位置: 首页 > 综合 > 正文

hdu1022火车(模似栈)

2018年02月22日 ⁄ 综合 ⁄ 共 1779字 ⁄ 字号 评论关闭
/*
4 1234 3421
4 1234 2314
5 12345 32541
6 123456 134562
6 123456 256431
*/
#include<stdio.h>

#include<string.h>

int main ()

{

    intn,i,f[100000];

    chara[2][100000];

    while(scanf("%d",&n)==1)

    {

        getchar ();

        for (i=0;i<n;i++)

        scanf ("%c",&a[0][i]);

        a[0][i]='\0';

        getchar ();

        for (i=0;i<n;i++)

        scanf ("%c",&a[1][i]);


        int flog=1,right,k,len=strlen(a[0]);

        for (i=len-1;i>=0;i--)

        if (a[0][i]==a[1][0])

        {

            k=i;break;

        }

        int t=k,m=1,p=1;

        memset(f,1,sizeof(f));   //判断

        for (i=0,right=k;i<len;i++)

        {

            p=1;

               if(m==0&&a[0][right]==a[1][i]&&f[right])

               {m=1;f[right]=0;}

               if (m==0)

               k=right;

               else

            if (right==len-1&&f[right])

            {


               if (a[0][k]!=a[1][i]&&f[k])

               {

                   flog=0;break;

               }

               k--;

            }

            else

            {

              if (a[0][right]==a[1][i]&&f[right])

              {

                  f[right]=0;

                  right++;

              if (right==len-1)

              m=0;

              }

              else if(a[0][k-1]==a[1][i]&&f[k-1])

                       {f[k-1]=0;k--;}

               else if(a[0][right+1]==a[1][i]&&f[right+1])

               {

                   for (right=right+1;right<len;right++)

               if (a[0][right]==a[1][i]&&f[right])

               {

                   f[right]=0;

                   if (right!=len-1)

                       right++;

                       break;

               }

               else

                   k=right;

               }

              else if(f[right+1])

              {

                  flog=0;break;

              }

            }

        }

                               //输出

        if (flog==0)

        {

            printf ("No.\nFINISH\n");

        }

        else

        {

            memset(f,1,sizeof(f));

            printf ("Yes.\n");

int flag=t,e=1,q=1,j,p=1;

               for (i=0;i<=t-1;i++)

           {

              printf ("in\n");//f[i]=0;

           }

            flog=0;

            for (i=0,right=t;i<len;i+=(p==1)?1:0)

            {

               p=1;

               if(right==len)

               {right--;e=0;}


               if (right==len-1&&a[0][right]==a[1][i])//只执行一次

               {

                   if (flog==0&&q&&e)

                   printf ("in\n");

                   flog=1;q=0;

                   printf ("out\n");

               }

               else

               {

                  if (a[0][right]==a[1][i]&&f[right])

                  {

                      if(flag==t)

                      t--;

                      printf ("in\n");

                   printf ("out\n");

                   f[right]=0;right++;

                  }

                  else if(a[0][t]==a[1][i])

                  {

                      f[t]=0;t--;

                   printf ("out\n");

                  }

                  else if(f[right]&&e)

                  for (right=right;right<len;right++)

                  {

                      e=0;

                      if(right!=len-1||q)

                      printf ("in\n");

                      if (a[0][right]==a[1][i]&&f[right])

                      {

                          f[right]=0;p=0;i++;//1

                      }

                      else if(a[0][t]==a[1][i])

                      {

                          f[t]=0;t--;p=0;i++;//1

                          printf ("out\n");

                          if(i==len)break;

                      }

                      else

                      t=right;

                      if (f[right]==0||f[t+1]==0)

                      printf ("out\n");

                  }

                  else for(j=t;j>=0;j--)

                  if(f[j])


              {printf ("out\n");f[j]=0;}

               }

           }

           printf ("FINISH\n");

        }

    }

    return 0;

}

【上篇】
【下篇】

抱歉!评论已关闭.