【NOIP2013】火柴排队 题解(贪心+归并排序)
前言:一道水题。
-----------------------
题目大意:给出数列$a_i$和$b_i$,问使$\sum_{i=1}^n (a_i-b_i)^2$最小的最少操作次数。
首先,如果两个数列相同位置的数排名相同,那么符合题意。现在我们证明一下:
证明:$a_i<a_j,b_i<b_j,(a_i-b_i)^2+(a_j-b_j)^2<(a_i-b_j)^2+(b_i-a_j)^2$
$(a_i-b_j)^2+(b_i-a_j)^2=a_i^2+b_i^2+a_j^2+b_j^2-2a_ib_j-2b_ia_j$
$(a_i-b_i)^2+(a_j-b_j)^2=a_i^2+b_i^2+a_j^2+b_j^2-2a_ib_i-2a_jb_j$
上式减下式得:$2a_i(b_i-b_j)+2a_j(b_j-b_i)$
$=2a_i(b_i-b_j)-2a_j(b_i-b_j)$
$=2(a_i-a_j)(b_i-b_j)>0$
所以$(a_i-b_i)^2+(a_j-b_j)^2<(a_i-b_j)^2+(b_i-a_j)^2$。
证毕。
计算次数的话就是比较新的位置和之前的位置,归并排序解决。其实就是归并排序求逆序对的变形。
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=;
int n,c[],r[],ans;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){
if (ch=='-') f=-;
ch=getchar();
}while(isdigit(ch)){
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
struct node
{
int x,l;
}a[],b[];
bool cmp(node s,node y)
{
return s.x<y.x;
}
void msort(int l,int ri)
{
if (l>=ri) return;
int mid=(l+ri)>>;
msort(l,mid);
msort(mid+,ri);
int i,j,k;
for (i=l,j=mid+,k=l;i<=mid&&j<=ri;)
if (c[i]>c[j])
{
ans=(ans+ri-j+)%mod;
r[k]=c[i];i++;k++;
}
else
{
r[k]=c[j];k++;j++;
}
for (;i<=mid;i++,k++) r[k]=c[i];
for (;j<=ri;j++,k++) r[k]=c[j];
for (int s=l;s<=ri;s++) c[s]=r[s];
}
signed main()
{
n=read();
for (int i=;i<=n;i++) a[i].x=read(),a[i].l=i;
for (int i=;i<=n;i++) b[i].x=read(),b[i].l=i;
sort(a+,a+n+,cmp);
sort(b+,b+n+,cmp);
for (int i=;i<=n;i++) c[b[i].l]=a[i].l;
msort(,n);
cout<<ans;
return ;
}
【NOIP2013】火柴排队 题解(贪心+归并排序)的更多相关文章
- LOJ2609. NOIP2013 火柴排队 【树状数组】
LOJ2609. NOIP2013 火柴排队 LINK 题目大意: 给你两个数列,定义权值∑i=1(ai−bi)^2 问最少的操作次数,最小化权值 首先需要发现几个性质 最小权值满足任意i,j不存在a ...
- [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)
[NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...
- [树状数组+逆序对][NOIP2013]火柴排队
火柴排队 题目描述 涵涵有两盒火柴,每盒装有n根火柴,每根火柴都有一个高度.现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:∑ (ai-bi)2,i=1,2,3,. ...
- [NOIP2013] 火柴排队(归并排序)
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- noip2013火柴排队_Solution
要想对任意(ai,bi)和(aj和bj),当ai<aj时,都有bi<=bj:当ai>=aj时,bi>=bj,当对a进行升序排序后(b同时发生改变,从而不改变值,最后有a1& ...
- NOIP2013火柴排队[逆序对]
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- jzoj[1438]NOIP2013火柴排队
读题: 相邻两个火柴可以交换?两个火柴序列?嗅到了归并排序的味道. 读完题目之后,我们可以知道,如果想要交换次数最少,可以先固定一个序列不变,比如说a序列不变,变b序列 样例是 4 2 3 1 4 3 ...
- noip2013 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- 洛谷p1966火柴排队题解
ps:鉴于你们的蒟蒻yxj实在太蒻辽, 所以, 看不懂也是正常的........ 树状数组 xxy学姐给我们讲的树状数组, 她讲的真的是太好啦!qwq!吹爆xxy 然后, 为了巩固自己, 硬着头皮写题 ...
随机推荐
- Layui文本框限制正整数
<input type="text" name="Number" lay-verify="required|integer" plac ...
- 微信小程序开发中遇到的几个小问题
本地图片不显示,开发工具运行是没问题的,但真机调试却显示不了 item.img = '/goods/img/图片.png' <image src="{{item.img}}" ...
- 【GIT】git详解
目录 一.基础使用 二.分支管理 三.提交树操作 四.复杂工作流处理 ----------------------------------------------------------------- ...
- 数据可视化之DAX篇(九) 关于DAX中的VAR,你应该避免的一个常见错误
https://zhuanlan.zhihu.com/p/67803111 本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同? -------------------- ...
- cnn卷积理解
首先输入图像是28*28处理好的图. 第一层卷积:用5*5的卷积核进行卷积,输入为1通道,输出为32通道.即第一层的输入为:28*28图,第一层有32个不同的滤波器,对同一张图进行卷积,然后输出为32 ...
- CSS文本控制
CSS文本控制 文本基础设置 字体设置 font-family可定义多个字体,系统会以从左至右的顺序进行查找,如左侧字体不存在,就往右侧找. 为什么要这么做呢?如果你只用了一种字体,而恰好人家电脑上没 ...
- unity-TextAsset
定义: 当把Text files导到unity,将会变成TextAsset. 支持的格式: .txt .html .htm .xml .bytes .json .csv .yaml .fnt 注意 不 ...
- Unity-ECS(一)浅谈CPU缓存命中和Unity面向数据技术栈(DOTS)--笔记
一,缓存类型 概念:局部性. 时间局部性:当前用到的一个存储器位置,不久的将来会被用到. 空间局部性:当前用到的一个存储器位置,附近的位置会被用到. 那么在CPU的层面,这两个局部性的特性就会被Cac ...
- 循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理
在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而 ...
- 据说比Spring快44倍的web开发框架,不妨试试
该框架称为:**light-4j **.官方网站简介:A fast, lightweight and more productive microservices framework.很简单,翻译过来就 ...