版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}