51nod 1574 排列转换 思维

44

 

 

 

          这题最开始是有思路的....脑抽了,当时想着对 1 0 0 1 0 1(0代表需要交换)这种情况没想明白,,,,orz

         上代码了

 

   

#include <algorithm>
#include <stdio.h>
#include <stack>
#include <istream>
#include <map>
#include <math.h>
#include <iostream>
#include <queue>
#include <string.h>
#include <set>
#include <cstdio>
#define MAX 2005
using namespace std;
const int maxn = 10000007;


int arr[maxn];
int vis[maxn];
int main() {
int n;
long long int ans =0;
scanf("%d",&n);
for(int i =0;i<n;i++) {
int num;
cin>>num;
arr[num]=i;
//scanf("%d",&arr[i]);
}
for(int i = 0;i<n;i++){
int num;
cin>>num;
ans+=abs(i-arr[num]);
}
cout<<ans/2<<endl;//两两交换,需要/2;
return 0;
}

 

posted @ 2018-04-10 23:21  Xzavieru  阅读(50)  评论(0)    收藏  举报