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

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

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

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

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

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

那就开始二分吧…

不过,每个数组都可以作为最小,中间,最大三种可能,所以我们有 C 3 2 C_3{2} C3​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. [Codeforces Round #635 (div2)]1337D - Xenia and Colorful Gems[二分][枚举]

    1337D - Xenia and Colorful Gems[二分][枚举] time limit per test memory limit per test input output 3 sec ...

  2. CodeForces - 1337D Xenia and Colorful Gems(二分)

    题目链接:点击查看 题目大意:给出三个序列分别记为 a,b,c,现在要求分别从三个序列中找出 x , y , z ,使得 ( x - y )^2 + ( y - z )^2 + ( y - z )^2 ...

  3. Codeforces Round #635 (Div. 2) D. Xenia and Colorful Gems 暴力 + 二分

    传送门 文章目录 题意: 思路: 题意: 给你三个数组a,b,ca,b,ca,b,c,让你从每个数组中选择一个数x,y,zx,y,zx,y,z,使得(x−y)2+(x−z)2+(y−z)2(x-y)^ ...

  4. Codeforces Round #635 (Div. 2) D.Xenia and Colorful Gems

    Codeforces Round #635 (Div. 2) D.Xenia and Colorful Gems 题目链接 Xenia is a girl being born a noble. Du ...

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

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

  6. 【题解】CF1070E Getting Deals Done(二分+思维)难度⭐⭐⭐

    CF1070E Getting Deals Done 题意翻译 题目描述 Polycarp有很多工作要做.最近他学会了一条新的时间管理技巧:"如果任务需要五分钟或更短时间,请立即执行&quo ...

  7. codeforces 808 E. Selling Souvenirs (dp+二分+思维)

    题目链接:http://codeforces.com/contest/808/problem/E 题意:最多有100000个物品最大能放下300000的背包,每个物品都有权值和重量,为能够带的最大权值 ...

  8. 2019 Multi-University Training Contest 1 - 1004 - Vacation - 二分 - 思维

    http://acm.hdu.edu.cn/showproblem.php?pid=6581 一开始想了好几个假算法.但是启发了一下潘哥,假如时间知道的话就可以从头开始确定各个车的位置.那么直接 \( ...

  9. CodeForces - 1370D Odd-Even Subsequence(二分+思维)

    题目链接:点击查看 题目大意:给出一个数组 a ,现在要求选出一个长度恰好为 k 的子序列 s ,使得的值最小 题目分析:当知道了 k 的大小之后,就可以计算出子序列奇数位置和偶数位置各有多少个数了, ...

最新文章

  1. python 去除str的引号 去除括号_Python基础教程:运算符以及数据类型解析
  2. 商品促销php设计,php – 什么是生成大量独特促销代码的最佳方式?
  3. 一罐百事可乐的背后,竟藏着这些人工智能
  4. NeurIPS 2020中国入选论文:新一代算法“鉴黄师”诞生,中科院计算所研究生一作...
  5. 超过100本的linux免费书籍
  6. java之上三角矩阵_7-1 判断上三角矩阵
  7. 小白兔生小白兔-菲波拉契数列问题
  8. 超轻型的数据库sqlite
  9. S2011打印机的IP设置
  10. cms不支持mysql_CMS不要让MySQL为你流泪
  11. oracle中如何模糊匹配,oracle中的截取,模糊匹配小结
  12. 《自拍教程48》Python_adb随机地图移图2小时
  13. html的视频字幕制作步骤,视频字幕制作软件如何制作视频滚动字幕|滚动字幕视频制作...
  14. Wed Jul 22 00:00:00 CST 2020 java转成指定日期格式的字符串
  15. Quartz_2.2.X学习系列四: Tutorials - Lesson 4: More About Triggers
  16. 不能说的hidden
  17. 什么是优先级反转及解决方法
  18. 无代码开发平台 有哪些?
  19. ios设备管理软件imazing 2.16.2官网下载,2022年强悍来袭!
  20. 论如何科学地倒牛奶~

热门文章

  1. SpringBoot+Vue项目知识管理系统
  2. Godaddy打不开和支付时没有支付宝选项的解决方法
  3. 2021-09-29:mentor calibre 2009 xRC文档
  4. 【攻略技巧】分分钟教你选出最适合自己的笔记本电脑!
  5. NVIDIA显卡驱动旧版本下载安装+CUDA下载+cudnn下载+解决CUDNN_STATUS_INTERNAL_ERROR+Failed to call ThenRnnForward
  6. 【基于Java的模拟趣味写字板设计与实现】(源代码+论文+PPT+视频部署及讲解 获取)
  7. C++ RTTI使用
  8. 程序员职业规划:30岁后如何实现质的突破!
  9. chartxy 柱状图_ChartControl 折线图 柱状图
  10. 中年男女霸占厕所激情 小伙内急敲门被打破头