B - Train Problem I

火车问题答案
解题思路

  • 1.如果待入栈火车和最顶目标火车相同就进行连续进栈出栈;

  • 2.若是不相同则只是进栈就行;

  • 3.最后利用出栈次数是否与进栈次数相同进行输出答案;

#include
#include
using namespace std;

int main()
{
    int n, i, j, k, flag[50]={0};//flag与k记录进出,1表示进0表示出;j表示出栈次数; 
    char s1[15], s2[15];
    stack  s;
    while(scanf("%d %s%s",&n,s1,s2)!=EOF)
    {   
        while(!s.empty())  
        s.pop(); //删除首元素
        j = k = 0;
        for(i = 0; i < n; i++)
        {
            s.push(s1[i]);//在队尾插入一个元素
            flag[k++] = 1;
            while(!s.empty() && s.top() == s2[j])
            {
                flag[k++] = 0;
                s.pop();
                j++;
            }
        }
        if(j == n)
        {
            printf("Yes.\n");
            for(i = 0; i < k; i++)
            {
                if(flag[i])
                    printf("in\n");
                else
                    printf("out\n");
            }
        }
        else
            printf("No.\n");
        printf("FINISH\n");
    }
    return 0;
}

你可能感兴趣的:(B - Train Problem I)