这题......一看图就能看出来用啥做了啊啊= =这个图是多么经典的讲栈的图......好吧,先看下题,输入火车进入的顺序,问出去的顺序是否可以达成............好吧,头文件默默打上<stack>开始做题吧= =
不过这题不只是要判断状态,还要把火车变成这个状态的步骤记录下来,一开始写的时候忽略了判断状态这点......结果写完步骤才发现得先判断,好吧,于是我“巧妙”的复制粘贴了一下╮(╯_╰)╭,代码行数瞬间变成两倍了,虽然有些繁琐,不过A了就好~
下面AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
char a[10005];
char target[10005];
stack<char>track;
int main()
{
int n;
char t;
int i,j;
while(scanf("%d",&n)!=EOF)
{
while(!track.empty())
{
track.pop();
}
scanf("%s",a);
scanf("%s",target);
j=0;
for(i=0;i<n;i++)
{
track.push(a[i]);
if(a[i]==target[j])
{
j++;
track.pop();
if(!track.empty())
t=track.top();
while(!track.empty())
{
if(t==target[j])
{
j++;
track.pop();
if(!track.empty())
t=track.top();
}
else
break;
}
}
}
if(!track.empty())
cout<<"No."<<endl<<"FINISH"<<endl;
else
{
cout<<"Yes."<<endl;
j=0;
for(i=0;i<n;i++)
{
cout<<"in"<<endl;
track.push(a[i]);
if(a[i]==target[j])
{
cout<<"out"<<endl;
j++;
track.pop();
if(!track.empty())
t=track.top();
while(!track.empty())
{
if(t==target[j])
{
cout<<"out"<<endl;
j++;
track.pop();
if(!track.empty())
t=track.top();
}
else
break;
}
}
}
cout<<"FINISH"<<endl;
}
}
return 0;
}