给定三个数组a,b,c.
要求从每个数字取一个数,使得两两之差和最小。
求出这个数。

\(我又懵逼了。我是会O(n^3)的暴力啊,怎么办。\)

\(\color{Red}{从结果看,选出来的三个数必定存在a<=b<=c}\)

能不能固定一个数或两个数来确定其余数来降低复杂度呢?可以的。

固定b,然后在其他两个数组中找a和c.

\(a一定是刚好小于等于b的,c一定是刚好大于等于b的。\)

那就开始二分吧.......

不过,每个数组都可以作为最小,中间,最大三种可能,所以我们有\(C_3{2}\)种要枚举。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
#define INF 0x7fffffffffffffff
int na,nb,nc,t;
ll a[maxn],b[maxn],c[maxn],ans;
ll ji(ll a,ll b,ll c){
return (a-b)*(a-b)+(a-c)*(a-c)+(b-c)*(b-c);
}
int find_min(ll x,ll a[],int na)
{
int l=1,r=na,mid;
while(r>l)
{
mid=(l+r+1)/2;
if(a[mid]<x) l=mid;
else if(a[mid]>x) r=mid-1;
else
{
l=mid;
break;
}
}
return l;
}
int find_max(ll x,ll a[],int na)
{
int l=1,r=na,mid;
while(r>l)
{
mid=(l+r)/2;
if(a[mid]>x) r=mid;
else if(a[mid]<x) l=mid+1;
else
{
r=mid;
break;
}
}
return r;
}
void solve(ll a[],ll b[],ll c[],int na,int nb,int nc)
{
for(int i=1;i<=nb;i++)//数组b为中间值
{
if(a[1]>b[i]) continue;
if(c[nc]<b[i]) continue;
int q=find_min(b[i],a,na);
int w=find_max(b[i],c,nc);
ans=min(ans,ji(a[q],b[i],c[w]));
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
ans=INF;
scanf("%d%d%d",&na,&nb,&nc);
for(int i=1;i<=na;i++) scanf("%lld",&a[i]);
for(int i=1;i<=nb;i++) scanf("%lld",&b[i]);
for(int i=1;i<=nc;i++) scanf("%lld",&c[i]);
sort(a+1,a+1+na);
sort(b+1,b+1+nb);
sort(c+1,c+1+nc);
solve(a,b,c,na,nb,nc);solve(a,c,b,na,nc,nb);
solve(b,a,c,nb,na,nc);solve(b,c,a,nb,nc,na);
solve(c,a,b,nc,na,nb);solve(c,b,a,nc,nb,na);
cout<<ans<<endl;
}
return 0;
}

Xenia and Colorful Gems(二分--思维)的更多相关文章

  1. CF #635D Xenia and Colorful Gems 枚举+二分

    Xenia and Colorful Gems 题意 给出三个数组,在每个数组中选择一个数字x,y,z,,使得\((x-y)^2+(y-z)^2+(x-z)^2\)最小. 思路 我们假设x<=y ...

  2. CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针

    LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ...

  3. Codeforces 1337D Xenia and Colorful Gems

    题意 给你3个数组\(a, b\)和\(c\),最小化\((x-y)^2+(y-z)^2+(z-x)^2\),其中\(x \in a, y \in b, z \in c\). 解题思路 这题其实第一眼 ...

  4. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

  5. codeforces 895B XK Segments 二分 思维

    codeforces 895B XK Segments 题目大意: 寻找符合要求的\((i,j)\)对,有:\[a_i \le a_j \] 同时存在\(k\),且\(k\)能够被\(x\)整除,\( ...

  6. cf1153E 二分思维交互

    恶臭的交互题 /* 一个结论:一个矩形将空间分割成两部分,如果开头结尾都在一个部分内,那么穿过矩形边框的线条数就是偶数,反之就是奇数 通过这个结论来进行判断 先询问999次将两个x坐标确定,方法是询问 ...

  7. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 1 1 10 1 1 10 1 1 10 1 4 4 1 ...

  8. LightOJ 1138 Trailing Zeroes (III)(二分 + 思维)

    http://lightoj.com/volume_showproblem.php?problem=1138 Trailing Zeroes (III) Time Limit:2000MS     M ...

  9. BZOJ - 5427:最长上升子序列 (二分&思维)

    现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值, 使得最长上升子序列最长.(为何最长呢?因为hxy向来对自己的rp很有信心)   Input 第一行一个正整数 ...

随机推荐

  1. Java读源码之ReentrantLock(2)

    前言 本文是 ReentrantLock 源码的第二篇,第一篇主要介绍了公平锁非公平锁正常的加锁解锁流程,虽然表达能力有限不知道有没有讲清楚,本着不太监的原则,本文填补下第一篇中挖的坑. Java读源 ...

  2. ASE课程总结 by 冯晓云

    开始的开始,采访往届ASE班的blog:http://www.cnblogs.com/legs/p/4894362.html 和北航软工M1检查:http://www.cnblogs.com/legs ...

  3. 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路

    本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...

  4. gitbook命令

    安装gitbook命令 前提:已经安装nodejs npm install -g gitbook-cli 查看版本号 gitbook -V gitbook命令 gitbook -h Usage: gi ...

  5. Vulnhub-dpwwn-01靶机过关记录

    靶机地址:172.16.1.192 Kali 目录扫描 查看info.php 端口扫描 开放3306,尝试弱密码或爆破mysql. 账户为root,密码为空,成功登陆. 查看数据库:再查看ssh表 查 ...

  6. webpack之Loader

    我们知道webpack的优点之一就是专注于处理模块化的项目,能做到开箱即用,但同时这也是webpack的缺点,只能用于模块化开发的项目,例如:Vue,React,Angular.Webpack在进行打 ...

  7. caddy配置php-fpm

    特码的,谷歌又用不了了. 吐槽完毕,正文如下: caddy是一个用go语言开发的服务器,可用作web端. caddy本身支持 -conf caddyfile的配置 在命令行中的体现: caddy -c ...

  8. 编程语言千千万,为什么学习Python的占一半?

    如果让你从数百种的编程语言中选择一个入门语言?你会选择哪一个? 是应用率最高.长期霸占排行榜的常青藤 Java?是易于上手,难以精通的 C?还是在游戏和工具领域仍占主流地位的 C++?亦或是占据 Wi ...

  9. sqli lab 1-4

    less-1 爆库 id=1222' union select 1,group_concat(schema_name),database() from information_schema.schem ...

  10. 关于宝塔下的项目中的php不能访问的问题

    遇到的问题是访问项目根目录的所有php文件都是报404错,而其他文件则可以,比如txt,最后查资料发现 在宝塔运行网站的时候会在项目的根目录自动生成一个.user.ini文件,这个文件主要是防止对指定 ...