Xenia and Colorful Gems(二分--思维)
| 给定三个数组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(二分--思维)的更多相关文章
- CF #635D Xenia and Colorful Gems 枚举+二分
		Xenia and Colorful Gems 题意 给出三个数组,在每个数组中选择一个数字x,y,z,,使得\((x-y)^2+(y-z)^2+(x-z)^2\)最小. 思路 我们假设x<=y ... 
- CF R 635 div2 1337D Xenia and Colorful Gems 贪心 二分 双指针
		LINK:Xenia and Colorful Gems 考试的时候没想到一个很好的做法. 赛后也有一个想法. 可以考虑答案的样子 x,y,z 可以发现 一共有 x<=y<=z,z< ... 
- 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\). 解题思路 这题其实第一眼 ... 
- Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)
		Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ... 
- codeforces  895B  XK Segments 二分 思维
		codeforces 895B XK Segments 题目大意: 寻找符合要求的\((i,j)\)对,有:\[a_i \le a_j \] 同时存在\(k\),且\(k\)能够被\(x\)整除,\( ... 
- cf1153E 二分思维交互
		恶臭的交互题 /* 一个结论:一个矩形将空间分割成两部分,如果开头结尾都在一个部分内,那么穿过矩形边框的线条数就是偶数,反之就是奇数 通过这个结论来进行判断 先询问999次将两个x坐标确定,方法是询问 ... 
- Showstopper [POJ3484] [二分] [思维]
		Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 1 1 10 1 1 10 1 1 10 1 4 4 1 ... 
- LightOJ 1138 Trailing Zeroes (III)(二分 + 思维)
		http://lightoj.com/volume_showproblem.php?problem=1138 Trailing Zeroes (III) Time Limit:2000MS M ... 
- BZOJ - 5427:最长上升子序列 (二分&思维)
		现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值, 使得最长上升子序列最长.(为何最长呢?因为hxy向来对自己的rp很有信心) Input 第一行一个正整数 ... 
随机推荐
- canvas 实现光线沿不规则路径运动
			canvas 实现光线沿不规则路径运动 此文章为原创,请勿转载 1.svg实现 2.canvas实现 3.坑点 svg让动画沿着不规则路径运动 查阅svg文档后发现,svg动画运动有两种实现方式,且都 ... 
- mysql  向上取整
			SELECT CEILING(10.0) --->10 SELECT CEILING(10.1) --->11 
- webWMS开发过程记录(三)- 需求分析(略)
			行业:汽车零部件制造 大方向:非唯一码,需有一套简单.易用.受控的误操作撤回机制 现状(略) 目标(略) 注:由于项目是自己根据以往经验,自己开发的,且开发时间不固定,故需求分析暂略,我会把工作重点放 ... 
- 利用numpy实现多维数组操作图片
			1.上次介绍了一点点numpy的操作,今天我们来介绍它如何用多维数组操作图片,这之前我们要了解一下色彩是由blue ,green ,red 三种颜色混合而成,0:表示黑色 ,127:灰色 ,255:白 ... 
- 千亿级平台技术架构:为了支撑高并发,我把身份证存到了JS里
			@ 目录 一.用户信息安全规范 1.1 用户信息.敏感信息定义及判断依据 1.1.1 个人信息 1.1.2 个人敏感信息 1.2 用户信息存储的注意事项 二.框架技术实现 2.1 用户敏感信息自 ... 
- tensorflow-参数、超参数、卷积核权值共享
			根据网上查询到的说法,参数就是在卷积神经网络中可以被训练的参数,比如卷积核的权值和偏移等等,而超参数是一些预先设定好并且无法改变的,比如说是卷积核的个数等. 另外还有一个最最基础的概念,就是卷积核的权 ... 
- Chrome插件安利!可以一键导出微信读书笔记|支持Markdown等三种格式
			众所周知,微信读书App 是一款非常优秀的阅读类App ,周围也有不少人在用.虽然工作比较忙.但是也没少在上面看书做笔记. 美中不足的是,目前微信读书虽然支持笔记导出,但是提供的是将笔记复制到剪切板, ... 
- golang实现并发爬虫一(单任务版本爬虫功能)
			目的是写一个golang并发爬虫版本的演化过程. 那么在演化之前,当然是先跑通一下单任务版本的架构. 正如人走路之前是一定要学会爬走一般. 首先看一下单任务版本的爬虫架构,如下: 这是单任务版本爬虫的 ... 
- 【5min+】为你的.NET应用进行一次全方位体检
			系列介绍 [五分钟的dotnet]是一个利用您的碎片化时间来学习和丰富.net知识的博文系列.它所包含了.net体系中可能会涉及到的方方面面,比如C#的小细节,AspnetCore,微服务中的.net ... 
- SpringMVC转发及重定向
			基础环境搭建请参考SringMVC入门程序 1:springmvc-servlet.xml <?xml version="1.0" encoding="UTF-8& ... 
