【题目描述 Description】
涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

[Sample 1]

2 3 1 4 
3 2 1 4
[Sample 2]

1 3 4 2 
1 7 2 4

样例输出 Sample Output

[Sample 1]
1
[Sample 2]
2

数据范围及提示 Data Size & Hint

【样例1说明】
最小距离是 0,最少需要交换 1 次,比如:交换第 1 列的前 2 根火柴或者交换第 2 列的前 2 根火柴。
【样例2说明】
最小距离是 10,最少需要交换 2 次,比如:交换第 1 列的中间 2 根火柴的位置,再交换第 2 列中后 2 根火柴的位置。
【数据范围】
对于 10%的数据, 1 ≤ n ≤ 10; 
对于 30%的数据,1 ≤ n ≤ 100; 
对于 60%的数据,1 ≤ n ≤ 1,000; 
对于 100%的数据,1 ≤ n ≤ 100,000,0 ≤火柴高度≤ 2^31 - 1。

【解题思路】

很明显可以看出,排序之后一一对应的值就是最小值

这个题刚开始我是把A排序,然后按照A的变化去变换B然后求逆序对,这个做法并不是正确的因为B刚开始也是无序的,如果将B按照A的方式求逆序对并不能得出正确的解。

应该把A,B都排一下序,然后按照B的标号处理A,就是另开一个C数组,数组变量是A的序号,组内储存对应位置B的标号,表示需要把在A[I]元素移动到j位置上,再将A重标号后的数据求逆序对。

 program huochai;
type aa=record
no,sum:Longint;
end;
zz=array[..] of aa;
const mo=;
var n,i,ans:longint;
a,f:array[..] of aa;
b,c,d,e:array[..] of longint;
procedure sort(l,r: longint; var c:zz);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=c[(l+r) div ].sum; repeat
while c[i].sum<x do
inc(i);
while x<c[j].sum do
dec(j);
if not(i>j) then
begin
c[]:=c[i];
c[i]:=c[j];
c[j]:=c[];
inc(i);
j:=j-; end; until i>j;
if l<j then
sort(l,j,c);
if i<r then
sort(i,r,c);
end; procedure guibing(l,r:longint);
var mid,i,q1,q2,q3:longint;
begin
mid:=(l+r) div ;
if l+<r then
begin
guibing(l,mid);
guibing(mid+,r);
end;
for i:=l to mid do
c[i]:=b[i];
for i:=mid+ to r do
d[i]:=b[i];
q1:=l;
q2:=mid+;
q3:=l;
while (q1<mid+) and (q2<r+) do
begin
if c[q1]<d[q2] then
begin
e[q3]:=c[q1];
inc(q1);
inc(q3);
end
else
begin
e[q3]:=d[q2];
ans:=((mid-q1+) mod mo+ans) mod mo;
inc(q3);
inc(q2);
end;
end;
if q2=r+ then
for i:=q1 to mid do
begin
e[q3]:=c[i];
inc(q3);
end
else
for i:=q2 to r do
begin
e[q3]:=d[i];
inc(q3);
end;
for i:=l to r do b[i]:=e[i]; end; begin
read(n);
for i:= to n do read(a[i].sum);
for i:= to n do
begin
a[i].no:=i;
f[i].no:=i;
end;
for i:= to n do read(f[i].sum);
sort(,n,a);
sort(,n,f);
for i:= to n do b[a[i].no]:=f[i].no;//重点在这里!!! guibing(,n);
writeln(ans);
end.

CODEVS 3286 火柴排队的更多相关文章

  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. 认识CoreData-多线程

    CoreData使用相关的技术点已经讲差不多了,我所掌握的也就这么多了.... 在本篇文章中主要讲CoreData的多线程,其中会包括并发队列类型.线程安全等技术点.我对多线程的理解可能不是太透彻,文 ...

  2. oracle 事务简介,锁的概念,java访问数据库注意事项

    java链接oracle和连接其他数据库一样有两种方式:1 桥接 jdbc-obdc2 jbdc insert语句一次插入大量数据 insert into table (列1,列2,列3) selec ...

  3. Java设计模式之策略模式(一)

    今年寒假没有回家,打算利用这个假期的时间进行学习设计模式,这一个人感觉比较牛的知识,前一段时间一直在忙着搞自己的专业课,还有就是捣鼓了一下Linux系统,没有好好的学习关于Java还有Android方 ...

  4. CSS内容

    选择器 框模型 背景和边框 文本效果 2D/3D 转换 动画 多列布局 用户界面 CSS3 边框 border-radius box-shadow border-image

  5. cvThreshold

    看了很多很坑的文章. 呵呵哒.而且基本上都是一个地方转载的,英文翻译我用你单独给一个词条么?就不能负点儿责? cvThreshold(img4, img3, 0, 128, CV_THRESH_OTS ...

  6. c语言面试题之sizeof

    c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...

  7. 记工作中的git遇到的问题

    看了 git 回退到某版本后,再在此版本上更新,无法push 操作前,我备份了修改了目录,准备建一个分支进行操作 我在本地revert了一次,commit到了远程仓库.然后上个版本的修改给恢复了... ...

  8. 浅试WebStorm配置Node.js开发环境

    web前端开发IDE一直喜欢用WebStorm,这里简单介绍如何用WebStorm搭建一个Node.js开发环境. 首先,需要在本地安装好node.js,以及npm包管理工具.你也可以吧node.js ...

  9. sql server中分布式查询随笔

    由于业务逻辑的多样性 经常得在sql server中查询不同数据库中数据 这就产生了分布式查询的需求 现我将开发中遇到的几种查询总结如下: 1.access版本 --建立连接服务器 exec sp_a ...

  10. Java机试题目_怎样截取字符串

    面试题1  怎样截取字符串 考题题干 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串.但是要保证汉字不被截半个,如"我ABC"4,应该截为" ...