Hdu 1022 Train Problem I

思路不清楚。以为要把所有的出栈,进栈的可能都列举出来。正确思路:这个是栈的应用,我们用一个栈s来存放列车的入栈序列, 用一个数组flag存放进出站顺序,如果栈顶和O2的队首是相同的,那么执行出站,且O2指向下一个要出站的坐标,flag标记进站,如果不相同,那么肯定是列车继续进站,s进行push就可以了,flag标记出站,最后如果s的元素已经超过了n,说明n个列车都已经进站了,下一个还是进站肯定不正确。

CODE:

 

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
#include <math.h>
using  namespace std;

const  int SIZE =  101;
char s[SIZE],  in[SIZE],  out[SIZE];
int flag[SIZE* 2 +  10];

int main()
{
     int i , j;
     int n, top, cnt;
     while(~scanf( " %d%s%s ", &n,  inout))
    {
        i =  0;
        j =  0;
        top = - 1;
        cnt =  0;
        memset(flag,  0sizeof(flag));
         while(j < n)
        {
             if(top == - 1 || s[top] !=  out[j] && i < n)
            {
                s[++top] =  in[i++];
                flag[cnt++] =  1;
            }
             else
            {
                 if(s[top] ==  out[j])
                {
                    top--;
                    ++j;
                    flag[cnt++] =  0;
                    
                }
                 else  break;
            }
        }
         if(top == - 1)
        {
            printf( " Yes.\n ");
             for(i =  0 ; i < cnt ; i++)
            {
                 if(flag[i])    printf( " in\n ");
                 else printf( " out\n ");
            }
        }
         else
        {
            printf( " No.\n ");
        }
        printf( " FINISH\n ");
    }
}


 

你可能感兴趣的:(HDU)