【题意描述】
给定两个有n个整数构成的序列,我们每次可以移动第一个序列的最后一个数,并可以把该数插在第一位或者中间某一个位置。求通过最少的步骤数使得第一个序列与第二个序列相同。
【解题思路】
本题采用贪心的思想。我们可以从第一个开始找,寻找不需要处理的序列数,然后用总长度减去不需要处理的数目即是答案。
【AC代码】
1 #include <iostream> 2 #include <cstring> 3 4 #define maxn 200000+10 5 6 using namespace std; 7 8 int n; 9 int a[maxn],b[maxn]; 10 int visit[maxn]; 11 int main (){ 12 while (cin>>n){ 13 int flag,temp; 14 int ans=maxn; 15 memset (visit,0,sizeof visit); 16 for (int i=0;i<n;i++){ 17 cin>>a[i]; 18 } 19 a[n]=0; 20 for (int i=0;i<n;i++){ 21 cin>>b[i]; 22 } 23 int j=0; 24 ans=0; 25 26 27 28 //求不用处理的元素个数 29 for (int i=0;i<n;i++){ 30 if (a[j]!=b[i]) 31 continue ; 32 j++; 33 ans++; 34 } 35 cout<<n-ans<<endl; 36 } 37 return 0; 38 }