首先找到需要移动的字符串,方法如下:以初始序列为准,设初始序列下标为i, 目的序列下标为j, 从n-1开始,如果两下标对应的字符串相等,下标同时减一,否则仅初始序列下标减一。那么目的序列中还未被成功匹配的字符串就是需要移动的字符串。要使移动次数最少,显然应该按未被处理的目的序列中字符串逆序移动(输出)。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
char a[200+5][80+5],b[200+5][80+5];
int num,tur;
cin>>num;
while(num--)
{
cin>>tur;
cin.get();
for(int i=0;i<tur;i++)
cin.getline(a[i],80+3);
for(int i=0;i<tur;i++)
cin.getline(b[i],80+3);
int flag_1=tur-1,flag_2=tur-1;
for(;flag_1>=0;flag_1--)
if(!strcmp(a[flag_1],b[flag_2]))
flag_2--;
for(int i=flag_2;i>=0;i--)
cout<<b[i]<<endl;
cout<<endl;
}
return 0;
}