解题思路:

注意事项:

参考代码:

#include <bits/stdc++.h>

using namespace std;

int main()

{

//3 123    321

//3 123 312

vector<char> v;//看成车站 

char order1[10],order2[10];//两个顺序 

int n;//n辆火车

int i=0,j=0,k=0;//i,此刻站内的火车数 

int r[20];//定义一个数组来判断输出in还是out 

while(scanf("%d%s%s",&n,order1,order2)!=EOF)

{

i=0;

j=0; 

//每次都得将r数组置空

for(int i=0;i<20;i++)

r[i]=0;

k=0; 

while(true)

{

if(v.empty() && i<n)

//栈内无车,入栈 

{

v.push_back(order1[i++]);

r[k++]=1;//表示入栈 

}

else if(!v.empty() && v.back()!=order2[j] && i<n)

//站内非空,说明1已经入栈, 如果不等于出栈的第一个,说明还有元素入栈

{

v.push_back(order1[i++]);

r[k++]=1; 

else if(!v.empty() && v.back()!=order2[j] && i==n)

//所有火车已经全部进栈 栈顶的第一个元素也不等于出栈的第一个元素 

{

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

v.clear();

break; 

}

else if(!v.empty() && v.back()==order2[j])

//站内非空, 栈顶元素和出栈顺序一致,将它出掉 

{

v.pop_back();

j++;

r[k++]=-1;

}

else

{

;

}

if(j==n)

//order1和order2 均已遍历结束

{

printf("Yes.\n"); 

for(k=0;k<2*n;k++)

{

if(r[k]==1)

printf("in\n");

else

printf("out\n");

}

printf("FINISH\n");

v.clear();

break;

}

return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论