zhangyuxuan


私信TA

用户名:dotcpp0741056

访问量:37

签 名:

悲观无用,不如思考伟大的蓝图。

等  级
排  名 4021
经  验 1788
参赛次数 1
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#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 人评分

  评论区

  • «
  • »