给定三个数组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. SpringCloud入门(十): Config 统一配置中心

    SpringCloud Config 简介 在分布式系统中,由于服务组件过多,为了方便争对不通的环境下的服务配置文件统一管理,实时更新,所以出现了分布式配置中心组件.市面上开源的配置中心有很多,360 ...

  2. 06-移动web之flex布局

    一.基本概念 flex布局又叫伸缩布局 .弹性布局 .伸缩盒布局 .弹性盒布局 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. ...

  3. 【DataBase】更改root根用户密码 和 SQLyog安装

    更改root根用户密码 和 SQLyog安装 无密码登录MySQL mysql -u root -p 修改密码与更新加密规则 ALTER USER 'root'@'localhost' IDENTIF ...

  4. Linux 命令系列之 seq

    简介 seq -- print sequences of numbers seq 命令可以输出各种有规律的数字. 用法 usage: seq [-w] [-f format] [-s string] ...

  5. Salesforce元数据入门指南,管理员必看!

    元数据是Salesforce基础架构的核心,是Salesforce中的核心组件或功能.没有元数据,大部分功能都无法实现. 但是,某些Salesforce管理员仍然很难掌握元数据的整个范围,并且无法充分 ...

  6. Daily Scrum 1/11/2016

    Zhaoyang & Minlong: Took and edited the video which introduced our APP. Yandong: Summarized bugs ...

  7. C - Max Sum Plus Plus HDU - 1024

    用二位数组dp[i][j]记录组数为i,前j个数字的最大子段和. 转移方程: dp[i][j],考虑第j个数,第j个数可以并到前面那一组,此时dp[i][j]=dp[i][j-1]+arr[j],第j ...

  8. tensorflow1.0 构建卷积神经网络

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data import os os.envi ...

  9. pytorch 中LSTM模型获取最后一层的输出结果,单向或双向

    单向LSTM import torch.nn as nn import torch seq_len = 20 batch_size = 64 embedding_dim = 100 num_embed ...

  10. TensorFlow keras 迁移学习

    数据的读取 import tensorflow as tf from tensorflow.python import keras from tensorflow.python.keras.prepr ...