题意:原串中的最后一个数可以移到串钱的任何位置,问移动最少多少个可以变成目标串。
想了N久,思路是:原串中如果位置在目标串中颠倒了,则后一个必须动,就会引起所有后面的都要动。所以只要中出在目标串中的升序的个数。用n去减就OK了。
#include<iostream>
using namespace std;
int a[200002];
int b[200002];
int main()
{
int n;
int num;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int j=0;j<n;j++)
{
cin>>num;
b[num]=j+1;
}
int ans=n;
for(int i=1;i<n;i++)
{
if(b[a[i]]<b[a[i-1]])
{
ans=n-i;
break;
}
}
cout<<ans<<endl;
return 0;
}