• 51nod-1574-排列转换


    题目来源: CodeForces
    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
     收藏
     关注

    现在有两个长度为n的排列p和s。要求通过交换使得p变成s。交换 pi 和 pj 的代价是|i-j|。要求使用最少的代价让p变成s。

    Input
    单组测试数据。
    第一行有一个整数n (1≤n≤200000),表示排列的长度。
    第二行有n个范围是1到n的整数,表示排列p。每个整数只出现一次。
    第三行有n个范围是1到n的整数,表示排列s。每个整数只出现一次。
    Output
    输出一个整数,表示从排列p变到s最少要多少代价。
    Input示例
    样例输入1
    4
    4 2 1 3
    3 2 4 1
    Output示例
    样例输出1
    3

        具体的过程就是类似于蚂蚁爬行那种,但写起来很麻烦,没猜到结论就是当前位置到目标位置的差加起来/2这一步。。。
    都是要把不在正确位置上的点移动到正确位置上,但可以借助交换减少一半的代价,,就酱紫
     1 #include<iostream>
     2 #include<cstring>
     3 #include<queue>
     4 #include<cstdio>
     5 #include<stack>
     6 #include<cmath>
     7 using namespace std;
     8 #define LL long long 
     9 int p[200020];
    10 int s[200020];
    11 int wz[200020];
    12 struct node{
    13     int fx,now,tar;
    14 };
    15 int main(){
    16     int n,i,j,k;
    17     cin>>n;
    18     for(i=1;i<=n;++i){
    19         scanf("%d",p+i);
    20         wz[p[i]]=i;
    21     }
    22     long long  ss=0; 
    23     for(i=1;i<=n;++i){
    24         scanf("%d",s+i);
    25         ss+=abs(i-wz[s[i]]);
    26     }
    27     cout<<ss/2<<endl;
    28     return 0;
    29 }
  • 相关阅读:
    数据类型
    32个关键字
    标识符
    Xcode常用快捷键
    Linux中级之keepalived配置
    linux中级之keepalived概念
    Linux中级之lvs三个模式的图像补充(nat,dr,tun)
    linux中级之防火墙的数据传输过程
    Linux中级之netfilter/iptables应用及补充
    linux中级之lvs配置(命令)
  • 原文地址:https://www.cnblogs.com/zzqc/p/8942221.html
Copyright © 2020-2023  润新知