UVA10152- ShellSort

题意:给n只乌龟按所给的顺序排序,要求移动乌龟的数量最少。

思路:要使移动的步骤最少,就要保证相对顺序相比较于目标顺序的不要进行移动(即最大的公共子序列不要移动)。这样的话,可以分别为两个序列设一个指示器,从尾部开始

            碰到两个序列都一样的就都减掉1,如果不相同的就相对顺序的减掉1,目标顺序的不变,最后将剩余的目标顺序的按逆序输出。

#include<stdio.h>
#include<string.h>

int main() {
	int cas;
	scanf("%d", &cas);

	while (cas--) {
		int n, cnt = 0;
		char s[300][100], str[300][100];
		scanf("%d", &n);
		getchar();

		for(int i = 0; i < n; i++)	
			gets(s[i]);
		for(int i = 0; i < n; i++)
			gets(str[i]);

		int i = n - 1, j = n - 1;
		while (i >= 0 && j >= 0) {
				if (strcmp(s[i], str[j])) {			
					i--;	
				}	
				else {			
					i--;
					j--;
				}	
		}
		while (j >= 0)
			puts(str[j--]);	
		printf("\n");
	}

	return 0;
}


 

你可能感兴趣的:(UVA10152- ShellSort)