脑袋好像生锈了一样这么久都没想出来。。。明明好简单
题意,给两组名字序列A, B,问从A到B最少的步骤是多少, 移动规则:抽出的乌龟只能放到队列的顶部
用第二组序列扫描第一组数,从N开始扫, 能对上的话两个都向上移动,并做标记,否则第一组坐标上移,这样的话从A->B相对顺序不变的(即不用移动的)就已经标记好了,没有标记的就是要移动的,由于本题规则,可以得出先移动的一定是放在后移动的下面,所以在B中越靠近下端的未标记的字符串一定先输出
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
char ori[500][500];
char aft[500][500];
bool vis[505];
int k , n;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
getchar();
memset(vis, 0, sizeof(vis));
for( int i = 0; i < n; i++)
gets(ori[i]);
for( int i = 0; i < n; i++)
gets(aft[i]);
for( int i = n-1, j = n - 1; i >= 0 && j >= 0;)
{
if(strcmp(aft[i],ori[j]))
j--;
else
{
vis[i] = true;
j--;
i--;
}
}
for( int i = n-1; i >=0; i--)
{
if(!vis[i])
puts(aft[i]);
}
printf("\n");
}
return 0;
}