UVA 10152

来源:互联网 发布:51talk怎么样 知乎 编辑:程序博客网 时间:2024/05/18 05:59

题目大意:一群名字不同的乌龟上下排列,给定初始状态和目标状态,你要通过移动使初始状态变为目标状态。每次移动规则为,选定一只乌龟,就可以将他扔到顶端。求最优移动情况。

解题思路:要使移动最少,则要尽量保证多的乌龟上下位置不变动,也就是判断,初始与目标有那些乌龟的上下位置关系是相同的。除了这些以外就是我们移动的乌龟。我们移动过的乌龟肯定在目标状态的顶层,从第一支移动的乌龟往上都是依次移动过的。所以定义两个标记变量,从底向上判断,如果相等标记同时向上,不等则标记初始的上移,直到标记初始的变量到顶。输出目标标记至顶的乌龟名字。

ac代码:

#include <iostream>#include <cstring>using namespace std;int main(){char a[1005][1005], b[1005][1005];int n, m, j;cin >> n;while (n--){cin >> m;getchar();for (int i=0; i<m; i++)gets(a[i]);for (int i=0; i<m; i++) gets(b[i]);j = m - 1;for (int i=m-1; i>=0; i--)if (!strcmp(a[i], b[j]))j--;for (; j>=0; j--)cout << b[j] << endl;cout << endl;}return 0;}
原创粉丝点击