这道题目相当于是让我们把a,b对齐,即a中第i大的数与b中第i大的数下标相同
一看到交换次数,很容易让人想到归并排序
我的做法是这样的
就样例而言:
a:1 3 4 2
b:1 7 2 4
读进来之后先处理a,b 把a,b按大小离散成1..n
离散之后
a:1 3 4 2
b:1 4 2 3
那么我们现在的问题就变成了,求a转化为b所用的次数
但是仍然很麻烦,所以要进一步离散 - -!
我们不难看出,在a数组中,1的目的地是1。2的目的地是3。3的目的地是4.4的目的地是2 那么我们可以另开一个数组,p[i]记录a[i]的目的地,即p={1,4,2,3}
当a的元素全都到达目的地之后,p数组就是{1,2,3,4}
所以答案就是使P数组变成1..n所需要的移动次数,也就是p的逆序对个数

如何求逆序对? http://www.cnblogs.com/FuTaimeng/p/5652994.html

代码:

#include<iostream>
#include<algorithm>
#define Size 100005
using namespace std; int n;
int a[Size],b[Size];
struct T{
int num,p;
}temp[Size];
int f[Size],place[Size];
int cc[Size];
int ans=; bool ff(T x,T y){return x.num<y.num;}
void lisan(T x[],int y[]){
sort(x+,x++n,ff);
for(int i=;i<=n;i++){
y[x[i].p]=i;
}
} void he(int st,int end,int mid){
int l=st,r=mid+;
for(int i=st;i<=end;i++){
if(l<=mid&&(r>end||f[l]<=f[r])){
cc[i]=f[l]; l++;
}
else{
cc[i]=f[r]; r++;
ans+=mid-l+;
ans%=;
}
}
for(int i=st;i<=end;i++)f[i]=cc[i];
}
void my_msort(int l,int r){
if(l<r){
int mid=(l+r)/;
my_msort(l,mid);
my_msort(mid+,r);
he(l,r,mid);
}
} int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>temp[i].num,temp[i].p=i;
lisan(temp,a);
for(int i=;i<=n;i++)cin>>temp[i].num,temp[i].p=i;
lisan(temp,b); for(int i=;i<=n;i++)place[b[i]]=i;
for(int i=;i<=n;i++){
f[i]=place[a[i]];
}
my_msort(,n);
cout<<ans<<endl;
}

code3286 火柴排队的更多相关文章

  1. Codevs 3286 火柴排队 2013年NOIP全国联赛提高组 树状数组,逆序对

    题目:http://codevs.cn/problem/3286/ 3286 火柴排队  2013年NOIP全国联赛提高组  时间限制: 1 s   空间限制: 128000 KB   题目等级 : ...

  2. 洛谷P1966 【火柴排队】

    题解 P1966 [火柴排队] 说明: 在数学中有个公式: (a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2 (你可以自己试着证一下) 两列火柴对应的两根火柴在各列 ...

  3. [树状数组+逆序对][NOIP2013]火柴排队

    火柴排队 题目描述 涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (ai-bi)2,i=1,2,3,. ...

  4. 【刷题】洛谷 P1966 火柴排队

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  5. [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)

    [NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...

  6. LOJ2609. NOIP2013 火柴排队 【树状数组】

    LOJ2609. NOIP2013 火柴排队 LINK 题目大意: 给你两个数列,定义权值∑i=1(ai−bi)^2 问最少的操作次数,最小化权值 首先需要发现几个性质 最小权值满足任意i,j不存在a ...

  7. 洛谷 P1966 火柴排队 解题报告

    P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 \(n\) 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: \(\s ...

  8. 【洛谷P1966】火柴排队

    火柴排队 题目链接 ∑(ai​−bi​)^2=∑ai^2-2*∑ai*bi+∑bi^2 显然∑ai^2+∑bi^2是不变的,我们要让 2*∑ai*bi最大,才能使原式最小 然后我们一眼就可以看出来, ...

  9. luogu P1966 火柴排队 (逆序对)

    luogu P1966 火柴排队 题目链接:https://www.luogu.org/problemnew/show/P1966 显然贪心的想,排名一样的数相减是最优的. 证明也很简单. 此处就不证 ...

随机推荐

  1. 6-8 Percolate Up and Down(20 分)

    Write the routines to do a "percolate up" and a "percolate down" in a binary min ...

  2. java设计模式--七大原则

    2016-05-14 20:45:38 设计模式到底是五大.六大还是七大,一直傻傻分不清楚,网上总是有说那些原则可以归为一个,我纠结了半天,突然发现自己是舍本逐末了,只要清楚这些原则的设计思想,其他的 ...

  3. Chrome 上传时打开对话框非常慢

    Chrome 上传时打开对话框非常慢 先说解决方法,将 Chrome 中这个选项关闭,打开会飞快. 如果只是图片之类是不会的,但是有 zip apk 之类的就会慢. 主要原因还是 Chrome 太安全 ...

  4. vCenter 6.5安装

    http://guanjianfeng.com/archives/1160269 最近,VMware发布了vSphere 6.5版本,之前的最新版本为6.0.新版本已经开始试行使用HTML5来管理vS ...

  5. sql server常用日期格式化

    /*8 24 108 - hh:mm:ss */ Select CONVERT(varchar(), GETDATE(), )-- :: Select CONVERT(varchar(), GETDA ...

  6. week2--线性表

    一.PTA实验作业 题目1:顺序表删除重复元素(6-3) 设计思路 代码截图 PTA提交列表说明 编译错误:写'->'符号的时候总是漏掉'>'; 写'!='符号的时候漏写'!'; 解决方法 ...

  7. ddt数据驱动

    数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运行后用例会自动加载成三个单独的用例 5.测试结果: Testi ...

  8. ROS注册级别LEVEL0-6,原来使用GRE通道是不要钱滴

    GRE通道是没有个数限制的.如果只做一个分公司的PPTP,L2TP,等等,也是不用钱滴. 跑OSPF就不行了,必须要给钱.

  9. python requests 爬取数据

    import requests from lxml import etree import time import pymysql import json headers={ 'User-Agent' ...

  10. selenium webdriver ——执行javascript代码

    在代码中import org.openqa.selenium.JavascriptExecutor;就可以使用executeScript.executeAsyncScript这两个方法了 execut ...