UVa 10152 ShellSort解题报告

来源:互联网 发布:kali linux dhcp 编辑:程序博客网 时间:2024/04/30 16:44

题意:有一堆的乌龟,输出一堆乱序的乌龟,然后输入一个正确的顺序,要求找到一种最小步骤的方法使得第一堆变成第二堆,每一次可以把乌龟移到第一个位置,输出该方法步骤。

思路:从后往前遍历第二个乌龟数组,与第一个乌龟数组比较。每个乌龟都有一个从小到大的编号,由第二个乌龟数组决定。于是变成了两个数字数组的顺序比较。将字符串比较抽象为数字顺序的比较。

11

24

33

45

56

62

题目的第二个样例可以抽象为上面的数组。可以看出,顺序匹配的只有456,就是说需要移动的只有123,而且需要从大到小移动。

输出有个小技巧,见代码。

#include <iostream>#include <string>using namespace std;int main(){freopen("data.txt", "r", stdin);int cases;string tur1[250], tur2[250];scanf("%d", &cases);while (cases--){int n;scanf("%d", &n);getchar();for(int i = 0; i < n; i++)getline(cin, tur1[i], '\n');for(int i = 0; i < n; i++)getline(cin, tur2[i], '\n');int n1 = n - 1, n2 = n - 1;for(int i = n1; i >= 0; i--)if(tur1[i] == tur2[n2])n2--;//通过排除已匹配的字符串for(int i = n2; i >= 0; i--)cout << tur2[i] << endl;//直接从已排序好的字符串中输出数据cout << endl;}return 0;}



0 0
原创粉丝点击