Train Problem I
题目

样例

思路
模拟栈水题,利用flag记录出入的方法很巧妙。
代码
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
int n;
bool flag[100];
string s1,s2;
while(cin>>n>>s1>>s2)
{
stack <char> s;
memset(flag,-1,sizeof(flag));
int cnts=0,cntf=0;
for(int i=0;i<n;i++)
{
s.push(s1[i]);
flag[cntf++]=1;
while(!s.empty()&&s.top()==s2[cnts])
{
flag[cntf++] = 0;
s.pop();
cnts++;
}
}
if(cnts==n)
{
printf("Yes.\n");
for(int i=0;i<cntf;i++)
{
if(flag[i])
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}
本文详细解析了TrainProblemI题目,通过模拟栈的方法巧妙地解决了出入站问题。使用C++实现,代码中包含了一个布尔数组flag来记录每个元素是否被弹出,最后输出每个元素的出入状态。
209

被折叠的 条评论
为什么被折叠?



