题目描述 Description###

\(Bzeroth\) 大陆最终还是覆灭了,所以你需要为地灾军团服务了。

地灾军团军师黑袍不擅长写题面,所以你只需要看简化版的题意即可。

给定 \(3\) 个长度均为 \(N\) 的正整数序列 \(A\) 、\(B\) 、\(C\) ,要求从三个序列中分别取出 \(3\) 个数 \(A_i\) 、\(B_j\) 、\(C_k\) ,使得 \(| C_k - B_j | + | C_k - A_i | + | B_j - A_i |\) 最小。

输入描述 Input Description###

第一行一个正整数 \(N\) 。

第二行 \(N\) 个正整数,第 i 个数为 \(A_i\) 。

第三行 \(N\) 个正整数,第 i 个数为 \(B_i\) 。

第四行 \(N\) 个正整数,第 i 个数为 \(C_i\) 。

输出描述 Output Description###

输出\(| C_k - B_j | + | C_k - A_i | + | B_j - A_i |\) 的最小值。

样例输入 Sample Input###

3
170 180 190
195 185 175
180 160 200

样例输出 Sample Output###

10

数据范围及提示 Data Size & Hint###

$ n \leq 152501 $

之前的一些废话###

题解###

先对\(A,B,C\) 数组排序,然后枚举\(A\) 中的元素,很显然当\(B,C\) 数组中的数与\(A_i\) 相差最小时答案最小,所以我们二分出\(B\) ,\(C\) 数组中\(A_i\) 的位置,然后算一算更新答案即可。

代码###

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define mem(a,b) memset(a,b,sizeof(a))
inline int read()
{
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int maxn=152510,oo=2147483647;
int n,A[maxn],B[maxn],C[maxn];
LL ans=oo;
bool judge(int k){return k>=0 && k<n;}
int main()
{
n=read();
for(int i=0;i<n;i++)A[i]=read();
for(int i=0;i<n;i++)B[i]=read();
for(int i=0;i<n;i++)C[i]=read();
sort(A,A+n);sort(B,B+n);sort(C,C+n);
for(int i=0;i<n;i++)
{
int Br=lower_bound(B,B+n,A[i])-B,Bl=-1;
if(Br>0)Bl=Br-1;
int Cr=lower_bound(C,C+n,A[i])-C,Cl=-1;
if(Cr>0)Cl=Cr-1;
if(judge(Br) && judge(Cr))ans=min(ans,(LL)abs(A[i]-B[Br])+(LL)abs(A[i]-C[Cr])+(LL)abs(B[Br]-C[Cr]));
if(judge(Br) && judge(Cl))ans=min(ans,(LL)abs(A[i]-B[Br])+(LL)abs(A[i]-C[Cl])+(LL)abs(B[Br]-C[Cl]));
if(judge(Bl) && judge(Cr))ans=min(ans,(LL)abs(A[i]-B[Bl])+(LL)abs(A[i]-C[Cr])+(LL)abs(B[Bl]-C[Cr]));
if(judge(Bl) && judge(Cl))ans=min(ans,(LL)abs(A[i]-B[Bl])+(LL)abs(A[i]-C[Cl])+(LL)abs(B[Bl]-C[Cl]));
}
printf("%lld",ans);
return 0;
}

总结###

NOIP模拟赛 最佳组合的更多相关文章

  1. CH Round #48 - Streaming #3 (NOIP模拟赛Day1)

    A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...

  2. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  3. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  6. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  7. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  8. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  9. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

随机推荐

  1. vuex 的使用 mapState, mapGetters, mapMutations, mapActions

    state => 基本数据getters => 从基本数据派生的数据mutations => 提交更改数据的方法,同步!actions => 像一个装饰器,包裹mutation ...

  2. 推荐书单(网课)-人生/编程/Python/机器学习-130本

    目录 总计(130本) 一.在读 二.将读 三.已读 非专业书单(77本) 四.已读 专业书单(53本) 五.已看网课(8个) 六.在看网课 一个人如果抱着义务的意识去读书,便不了解读书的艺术.--林 ...

  3. 第02组 Beta版本演示

    目录 1. 博客链接及组员信息(2分) 2. 贡献比例(3分) 3. GitHub 项目链接(1分) 4. 博客汇总(2分) 5. 燃尽图(3分) 6. 原计划.达成情况及原因分析(6分) 7. Be ...

  4. linux下用sox音频处理常用方法

    一 sox可以给pcm文件加头 方法:sox -t raw -c 1 -e signed-integer -b 16 -r 16000 test.pcm test.wav 二 修改采样率: 方法: s ...

  5. new 关键字 和 newInstance() 方法的 区别

    区别1: new是一个关键字,可以说是一个指令: newInstance()是一个方法,Class对象的一个方法. 区别2: new主要作用是在内存中生成一个实例,而这个类可以没有提前加载到内从中: ...

  6. Linux安装最新版Node.js

    由于直接yum安装的nodejs版本太低,所以本篇文章向大家介绍在 Linux 上安装 Node.js 最新版的方法. 安装环境 本机系统:CentOS Linux release 7.5 Node. ...

  7. html的特殊符号对照表

    HTML的特殊符号对照表. 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十进制编码 Α Α Α Β Β Β Γ Γ Γ Δ Δ Δ Ε Ε Ε Ζ Ζ Ζ Η ...

  8. Sql 代码规范说明

    对于程序工作者来说,代码的阅读必不可少,好的代码让人读起来一目了然.神清气爽,做代码调试也可以很开的捋顺逻辑定位问题,但是如果遇到一些可读性较差,毫无规矩可言的代码,那真的比吃了翔都难受啊,如果再让你 ...

  9. LazyCoder修仙之路

    本人不才,没有高文凭,茹果本人的修仙[开发]之路能 ,走的很远,后来的人能看的上我 作品,有不足,和不对,帮帮我完善和理解.这也是我 学习笔记把!

  10. PlayJava Day001

    今日所学: /* 2019.08.19开始学习,此为补档. */ 三目(元)运算符 格式:(表达式)? 表达式为true返回值A : 表达式为false返回值B 例: String s=2>3 ...