http://acm.hdu.edu.cn/showproblem.php?pid=1022
题意说在一个火车站只用一个铁轨可供停车,并且每次进入铁轨的车必须等后进来的车走之后才能开走,火车数量最多是9,给定一个驶入顺序,和驶出顺序,问怎么操作才能从驶入顺序得到驶出的顺序,如果能输出方案,不能就输出No。
这题跟算法竞赛入门经典讲过类似,只是这里在判断是否可行的同时需要保存一种操作状态,我是用一个数组标记,为1表示in,为0表示out,并且这题是所有车都要进入铁轨停车,所以不存在直接开走的情况。
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
int main()
{
int n,j,flag[10];
char a[10],b[10];
while(scanf("%d %s %s",&n,a+1,b+1)!=EOF)
{
stack<int>s;
memset(flag,0,sizeof(flag));
int ok=1,A=1,B=1,i=0;
while(B<=n)
{
//if(a[A]==b[B]) {flag[i++]=1;A++,B++;}
if(!s.empty()&&s.top()==(b[B]-'0')) {flag[i++]=0;s.pop();B++;}
else if(A<=n) {flag[i++]=1;s.push(a[A]-'0');A++;}
else {ok=0;break;}
}
if(ok)
{
printf("Yes.\n");
for(j=0;j<i;j++)
if(flag[j]) printf("in\n");
else printf("out\n");
printf("FINISH\n");
}
else printf("No.\nFINISH\n");
}
return 0;
}