您的位置:首页 > 运维架构 > Shell

UVA10152- ShellSort

2013-08-17 20:12 351 查看
题意:给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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: