【UVA】10152 ShellSort (几只乌龟的故事)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CSDN___CSDN/article/details/88242799

https://vjudge.net/problem/UVA-10152

题目大意:

输入N,给你N个乌龟的名字,下面N行是初始状态,在下面N行是最终状态,你选中这只乌龟以后,只能把它移动到最上面,问怎么样操作步数最少,可以时上面的N行变成下面的N行

我的方法:

用两个string数组来存储,设置i=N-1,j=N-1,从后往前扫,当待转数组和目标数组相同时,i--,j--,不相同的话,只有待转数组的“指针”减一,最后待转数组已经指向第一个元素,目标数组还没有指到,在它所指的那个元素之前的元素,逆序输出,就是答案。为什么逆序输出,因为在下面的当然要先上去了

#include <iostream>
#include <string>

using namespace std;

string s1[205];
string s2[205];

int main ()
{
	int i,j,T,N;
	cin >> T;
	while(T--)
	{
		cin >> N;
		getchar();
		for(i=0;i<N;i++)
		{
			getline(cin,s1[i]);//待转数组 
		}
		for(i=0;i<N;i++)
		{
			getline(cin,s2[i]);//目标数组 
		}
		i = N-1;
		j = N-1;
		while(j>=0 && i>=0)
		{
			if(s1[i]==s2[j])
			{
				i--;
				j--; 
			}
			else
			{
				i--;
			}
		}
		for(i=j;i>=0;i--)
		{
			cout << s2[i] << endl;
		}
		cout << endl;
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/CSDN___CSDN/article/details/88242799