题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=vimiQkqjU

【题目描述】

样例一输入:

4

2 3 1 4

3 2 1 4

样例二输入:

4

1 3 4 2

1 7 2 4

思路:对于两盒火柴,最小距离∑(1≤i≤n)(ai - bi)2 可推出只与ai*bi有关,又可知顺序的值大于等于乱序的值,因此只需要将A与B的顺序做成一样的即可,第一想法是考虑升序 或者降序,但是要求交换次数最小,则可取其中一个不动,另外一个的相对顺序变成一样的即可,代码中a[i]表示b的位置,i表示a的第i个元素,则只需要把a进行逆序对统计即可。

代码如下:

 #include "iostream"
#include "cstdio"
#include "algorithm"
#define maxn 100100
#define ll long long
using namespace std; struct stick
{
int length, id;
bool operator < (const stick& a)const
{
return length < a.length;
}
}s[maxn], d[maxn]; ll temp[maxn], n, a[maxn];
ll sum = ; void merge(ll b[], ll l, ll r)
{
for (int i = l; i <= r; i++)
{
temp[i] = b[i];
}
int mid = (l + r) >> ;
int i = l, j = mid + ;
for (int pos = l; pos <= r; pos++)
{
if (i == mid + )
{
a[pos] = temp[j];
j++;
}
else if (j == r + )
{
a[pos] = temp[i];
i++;
}
else if (temp[i] > temp[j])
{
a[pos] = temp[j];
j++;
sum += mid - i + ;
sum %= ;
}
else
{
a[pos] = temp[i];
i++;
}
}
} void msort(ll b[], ll l, ll r)
{
if (l == r)
return;
int mid = (l + r) >> ;
msort(b, l, mid);
msort(b, mid + , r);
merge(b, l, r);
} int main()
{
freopen("MatchNOIP2013.in", "r", stdin);
freopen("MatchNOIP2013.out", "w", stdout);
cin >> n;
for (int i = ; i < n; i++)
{
cin >> s[i].length;
s[i].id = i;
}
for (int i = ; i < n; i++)
{
cin >> d[i].length;
d[i].id = i;
}
sort(s, s + n);
sort(d, d + n);//排序后方便将id离散化
for (int i = ; i < n; i++)
{
a[s[i].id] = d[i].id;
}
msort(a, , n - );
cout << sum % << endl;
return ;
}

逆序对 -- cogs1438 火柴排队的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. P1966 火柴排队——逆序对(归并,树状数组)

    P1966 火柴排队 很好的逆序对板子题: 求的是(x1-x2)*(x1-x2)的最小值: x1*x1+x2*x2-2*x1*x2 让x1*x2最大即可: 可以证明将b,c数组排序后,一一对应的状态是 ...

  7. NOIP2013火柴排队[逆序对]

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

  8. NOIP 2013 提高组 day1 T2 火柴排队 归并 逆序对

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

  9. 【题解】洛谷P1966 [NOIP2013TG] 火柴排队(树状数组+逆序对)

    次元传送门:洛谷P1966 思路 显然在两排中 每排第i小的分别对应就可取得最小值(对此不给予证明懒) 所以我们只在意两排的火柴是第几根 高度只需要用来进行排序(先把两个序列改成有序的方便离散化) 因 ...

随机推荐

  1. c语言1-2019秋作业02

    格式: 这个作业属于那个课程 C语言程序设计I 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/8688 我在这个课程的 ...

  2. bzoj3993: [SDOI2015]星际战争(二分+最大流)

    题目描述 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战. 在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地,其中第i个巨型机器人的装甲值为Ai.当一个巨型机器人的装甲值 ...

  3. vs2015 远程调试web

    1.找到vs2015远程调试器 针对服务器版本选择 X64 .X86,把文件夹复制到服务器 2.在服务器中运行:msvsmon.exe 选择 工具->选项,修改成 无身份验证,允许任何用户进行调 ...

  4. DataGrip 配置连接mysql8.0的注意事项

    在mysql8.0版本之后,依赖驱动文件不同,使用之前的连接配置,会无法正常的连接数据库. 已连接本地Mysql数据库为例,需在 URL配置项 jdbc:mysql://localhost:3306? ...

  5. 包过滤防火墙iptables(网络层)

    安装: yum -y install iptables-services 启动:systemctl start iptables.service 四表五链 过滤:filter - input forw ...

  6. Web安全(白帽子讲)之第二篇

    第二章:浏览器安全 2.1.同源策略 是一种约定,它是浏览器最核心也是最基本的安全功能. web是构建在同源策略的基础之上,浏览器只是针对同源策略的一种实现 影响“源” 的因素有:host(域名或IP ...

  7. Codeforces 1238E. Keyboard Purchase

    传送门 注意到 $m$ 只有 $20$ ,考虑一下状压 $dp$ 设 $f[S]$ 表示当前确定的字符集合为 $S$ ,那么转移就考虑从最右边加入的下一个字符 $c$ 那么问题来了,代价如何计算 考虑 ...

  8. Java基础__Java中自定义集合类

    Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...

  9. Ubuntu 16.04 一键安装P4开发环境记录

    写在最前 P4开发环境安装可采用陈翔同学的一键安装脚本:p4Installer p4c-bm是P4-14的编译器,p4c是现在主流P4-16的编译器,bmv2是支持P4运行的软件交换机 系统环境 在安 ...

  10. Android跨进程通信Messenger

    一.概述 我们可以在客户端发送一个Message给服务端,在服务端的handler中会接收到客户端的消息,然后进行对应的处理,处理完成后,再将结果等数据封装成Message,发送给客户端,客户端的ha ...