题目
问题 B: 火车站(DS线性结构)
时间限制: 1 Sec 内存限制: 128 MB
提交: 11 解决: 6
[ 提交] [ 状态] [ 讨论版]
题目描述
火车站只有一条铁路,所有的火车都停在那里。所以所有的火车都是从一边进站,从另一边出站。如果A列先进入铁路,然后B列在A列离开之前进入铁路,那么A列在B列离开之前不能离开。下图说明了问题所在。车站里最多有9 列火车,所有的火车都有一个ID(编号从1 到N),火车按照O1的顺序进入火车,火车是否可以按照O2的顺序驶出。
输入
输入包含几个测试用例。
每个测试用例由一个整数(列车数)和两个字符串组成。两个字符串分别为列车入站顺序和列车出站顺序。
输出
如果不能按照指定顺序出站,输出“No”。
如果可以,输出“Yes”,然后输出出入站顺序(对于进入铁路的列车,应输出“in”,对于出铁路的列车,应输出“out”)。在每个测试用例之后打印一行包含“FINISH”。
样例输入
3
3 123 321
3 abc cab
3 123 123
样例输出
Yes
in
in
in
out
out
out
FINISH
No
FINISH
Yes
in
out
in
out
in
out
FINISH
代码块
#include <iostream>
#include <queue>
using namespace std;
int main ( void )
{
int i, j, k, t;
cin>> t;
while ( t-- )
{
int n, temp;
int pos = 1 ;
cin>> n;
string s1, s2;
cin>> s1>> s2;
int len1 = ( int ) s1. length ( ) ;
int len2 = ( int ) s2. length ( ) ;
i = 0 ;
j = 0 ;
temp = - 1 ;
queue< string> q;
while ( i!= len2)
{
for ( j= 0 ; j< len1; j++ )
{
if ( j> temp)
q. push ( "in" ) ;
if ( s2[ i] == s1[ j] )
break ;
}
if ( j< temp)
{
pos = 0 ;
break ;
}
while ( i< len2 && j>= 0 && s2[ i] == s1[ j] )
{
i++ ;
j-- ;
q. push ( "out" ) ;
for ( k= j+ 1 ; k< len1- 1 ; k++ )
{
temp = s1[ k] ;
s1[ k] = s1[ k+ 1 ] ;
s1[ k+ 1 ] = temp;
}
len1-- ;
}
temp = j;
}
if ( ! pos)
cout<< "No" << endl<< "FINISH" << endl;
else
{
cout<< "Yes" << endl;
while ( ! q. empty ( ) )
{
string s = q. front ( ) ;
q. pop ( ) ;
cout<< s<< endl;
}
cout<< "FINISH" << endl;
}
}
}