描述

涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑i=1n(ai−bi)2∑i=1n(ai−bi)2,其中 aiai 表示第一列火柴中第 i 个火柴的高度,bibi 表示第二列火柴中第 i 个火柴的高度。

每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,请输出这个最小交换次数对 99,999,997 取模的结果。

格式

输入格式

共三行,第一行包含一个整数 n,表示每盒中火柴的数目。

第二行有 n 个整数,每两个整数之间用一个空格隔开,表示第一列火柴的高度。

第三行有 n 个整数,每两个整数之间用一个空格隔开,表示第二列火柴的高度。

输出格式

输出共一行,包含一个整数,表示最少交换次数对 99,999,997 取模的结果

样例1

样例输入1[复制]

 4
2 3 1 4
3 2 1 4

样例输出1[复制]

 1

样例2

样例输入2[复制]

4

1 3 4 2

1 7 2 4

样例输出2[复制]

2

解题报告

刚拿到这道题的时候有一点懵,好吧可能自己现在能力不够。

这道题先快排得到两个对应序列是距离最小的(这点是想到了的),记录第二组的位置排序,然后将第一组序列按原位置排列同时将对应的那一组序列排好序,以这组的位置序列为归并序列求逆序对。(好像有点乱,下面来讲解)

a.data:1 3 4 2   a.pos:1 2 3 4 

b.data:1 7 2 4  b.pos:1 2 3 4

排序(a,b,data)后

a.data:1 2 3 4 a.pos:1 4 2 3

b.data:1 2 4 7 b.pos:1 3 4 2

记录对应a.ca: 1 3 4 2

排序(a,pos)后

data=a.ca:1 4 2 3

然后归并 求逆序对

代码附下

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int mm=;
int n,data[],ans,y[];
struct pp{
int data,pos,ca;
};
pp a[],b[];
int comp(const pp&a,const pp&b)
{
return a.data<=b.data;
}
int comp2(const pp&a,const pp&b)
{
return a.pos<=b.pos;
}
void mergesort(int l,int r)
{
if (l==r) return ;
int mid=(l+r)>>;
mergesort(l,mid);
mergesort(mid+,r);
int i=l;
int j=mid+;
int o=l;
while (i<=mid||j<=r)
{
if (j>r||i<=mid&&data[i]<=data[j])
y[o++]=data[i++];
else
{
y[o++]=data[j++];
ans=(ans+mid-i+)%mm;//WA ans+=(mid-i+1)%mm
}
}
while(i<=mid)
y[o++]=data[i++];
while (j<=r)
y[o++]=data[j++];
for (int i=l;i<=r;i++)
data[i]=y[i];
}
int main()
{
freopen("match.in","r",stdin);
freopen("match.out","w",stdout);
cin>>n;
for (int i=;i<=n;i++)
{
scanf("%d",&a[i].data);
a[i].pos=i;
}
for (int i=;i<=n;i++)
{
scanf("%d",&b[i].data);
b[i].pos=i;
}
sort(a+,a++n,comp);
sort(b+,b++n,comp);
for (int i=;i<=n;i++)
a[i].ca=b[i].pos;
sort(a+,a++n,comp2);
for (int i=;i<=n;i++)
data[i]=a[i].ca;
mergesort(,n);
cout<<ans;
return ;
}

啊,对,要注意  ans+=(mid-i+1)%mm  与  ans=(ans+mid-i+1)%mm; 的区别

前者要错最后两组数据 后者不会
 
多复习复习归并排序
 
好像还可以用树状数组,还有冒泡排序;
如果有时间再写。

NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对的更多相关文章

  1. noip 2013 提高组 day1

    1.转圈游戏: 解析部分略,快速幂就可以过 Code: #include<iostream> #include<fstream> using namespace std; if ...

  2. NOIP 2013 T2 火柴排队 ---->求逆序对

    [NOIP2013T2]火柴排队 背景 noip2013day1 描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各 自 排成一列, 同一列火柴的高度互不相同, ...

  3. NOIP 2015 提高组 Day1

    期望得分:100+100+100=300 实际得分:100+100+45=245 T3 相似的代码 复制过去 没有改全,痛失55分 http://www.cogs.pro/cogs/page/page ...

  4. NOIP 2014 提高组 Day1

    期望得分:100+100+50=250 实际得分:100+100+50=250 此次NOIP  ZJ省一分数线:500,SD:345 https://www.luogu.org/problem/lis ...

  5. NOIP 2013提高组day 1 T 1转圈游戏 快速幂

    描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推 ...

  6. noip 2013 提高组 Day2 部分题解

    积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) #include<iostream> #incl ...

  7. NOIP 2013 提高组 day2 积木大赛

      积木大赛 描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为 n 的大厦,大厦可以看成由 n 块宽度为1的积木组成,第

  8. 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值

    不难发现,树中与某个点距离为2的点只可能是它的父亲的父亲.儿子的儿子 或者 兄弟,分类讨论一下即可. 只有对于兄弟我们不能暴力搞,维护一下每个节点的所有儿子的前缀和.前缀MAX就行了. #includ ...

  9. NOIP 2013 提高组 洛谷P1967 货车运输 (Kruskal重构树)

    题目: A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情 ...

随机推荐

  1. 自定义获取焦点的TextView

    自定义控件编写流程 创建一个默认就能获取焦点的TextView 1.创建一个类继承至TextView,FocusTextView 2.重写其构造方法 //使用在通过java代码创建控件 public ...

  2. UIButton(在代码中使用)

    - (void)viewDidLoad { [super viewDidLoad]; // 1.1 创建按钮对象 // UIButton *button = [[UIButton alloc] ini ...

  3. Android中的启动模式(下)

    在这篇文章中,我会继续跟大家分享有关于Android中启动模式的相关知识.当然,如果对这个启动模式还不完全了解或者没有听过的话,可以先看看我之前写的有关于这个知识点的入门篇Android的启动模式(上 ...

  4. Android Context 是什么?

    andorid 开发(42)  版权声明:本文为博主原创文章,未经博主允许不得转载. [转载请注明出处:http://blog.csdn.net/feiduclear_up CSDN 废墟的树] PS ...

  5. [转]使用git命令上传代码

    http://jiajing.elastos.org/2013/04/15/%E4%BD%BF%E7%94%A8git%E5%91%BD%E4%BB%A4%E4%B8%8A%E4%BC%A0%E4%B ...

  6. wampserver2.5安装 redis缓存,igbinary, phalcon框架

    wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...

  7. java 模板

    模板模式: 解决某类事情的步骤有些是固定的,有些是会发生变化的,这时我们提供 一个模板代码,从而提高效率. 模板模式的作用: 1.解决这类事情其中一件的解决方案. 2.分析代码,把发生变化的代码抽象取 ...

  8. dede会员指定栏目发布文章

    后台——核心——网站栏目管理——修改栏目——常规选项——支持投稿

  9. 编程获得CPU的主频

    CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed).CPU的主频表示在CPU内数字脉冲信号震荡的速度.主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者 ...

  10. Jquery如何获得<iframe>嵌套页面中的元素

    DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.documentjq ...