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

UVA 10152 ShellSort

2015-07-27 11:06 330 查看

题目

龟壳排序

分析

标题党,与
希尔排序
无关;

给出两组
龟壳
,一组初始序列,一组目标序列。要求对初始序列排序,达到目标序列,排序规则要求一次仅能把某
龟壳
移至顶部。依次输出移动的
龟壳
的名字。

思路

逆向思考,如何把目标序列滚回初始序列,举一个栗子。

Y R S D E M Z F W -> Y D S E M R Z F W

(Y) (R) (S) D E M Z F W -> () D () E M () Z F W

S -> ^ E

R -> ^ Z

Y -> ^ D

也就是说,先用目标序列在初始序列找到相对位置最长的子串(即目标序列两个字符间可以插入非匹配字符),目标序列剩下未匹配的字符即是初始序列需要移动的字符。

代码

#include <cstdio>
#include <cstring>

int main()
{
int k, n, i, j;
char a[205][85], b[205][85];
scanf("%d\n", &k);
while (k--) {
scanf("%d\n", &n);
for (i = 0; i < n; i++) fgets(a[i], 85, stdin);
for (i = 0; i < n; i++) fgets(b[i], 85, stdin);
for (i = j = n-1; i >= 0; i--) if (strcmp(b[j], a[i]) == 0) j--;
for (; j >= 0; j--) printf("%s", b[j]);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: