Problem:偶然间最糟糕的再会
Description:
一天Murphyc从睡梦中醒来,发现自己居然穿越到了弹丸论破的世界。作为原作全成就通关的超高校级Gamer,Murphyc很清楚接下来会发生什么。为了中止Chiaki即将面临的“学级裁判”,Murphyc溜进了未来机关内部,但是只有持有特定编号的识别卡才能进入机关控制室。
好在,Murphyc其实还有另一重身份----法师学徒!虽然Murphyc手中只有门口警卫的识别卡,但机智的他发现该警卫的识别卡编号只要经过若干次Magic操作便可变为原作CG中某重要角色Chisa的的识别码。
Magic操作:对于i与j位置的两个数字你可以消耗|i-j|的魔力值以交换两个数字的位置。
例如
现在已知警卫的识别码为一个长度为n的整数序列a,ai<=n, Chisa的识别码为长度为n的整数序列b,bi<=n,并且,a、b序列均为[1,n]的全排列之一.为了节约魔力,请问Murphyc至少要消耗多少魔力才能获得Chisa的识别码?
Input:
第一行一个数字T代表测试的组数(T<=20)
对于每组测试,第一行一个数字n代表序列的长度(n<=2e5)
接下来一行有n个数字a1,a2,a3….an(1<=ai<=n)
接下来一行有n个数字b1,b2,b3…bn(1<=bi<=n)
Output:
对于每行输出一个整数
Sample Input:
1
4
2 3 4 1
1 3 4 2
Sample Output:
3
Language:C++
#include <iostream>
#include <cmath>
#define N 200010
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
long a[N],b[N],c[N];
for(int i=1;i<=n;i++)
{
cin>>a[i];
c[a[i]]=i;
}
for(int i=1;i<=n;i++) cin>>b[i];
long ans=0;
for(int i=1;i<=n;i++) ans+=fabs(c[b[i]]-i);
cout<<ans/2<<endl;
}
return 0;
}