Xenia and Colorful Gems

题意

给出三个数组,在每个数组中选择一个数字x,y,z,,使得\((x-y)^2+(y-z)^2+(x-z)^2\)最小。

思路

我们假设x<=y<=z

枚举所有的数作为y时,可以取得的最小值。

具体实现:使用vectorvec[4]存三个数组里的数字。

定义一个数组arr[]={1,2,3},对它进行全排列,每次枚举vec[arr[2]]里的元素作为y,vec[arr[1]]里的元素作为x,vec[arr[3]]里的元素作为z。

x取第一个<=y的,z取第一个>=y的。

代码

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
typedef long long ll;
const int N=1e6+10;
const ll inf=0x3f3f3f3f3f3f3f3f; vector<int>vec[10];
int num[5],arr[4];
int Min(int x,int pos)
{
int l=0,r=vec[pos].size()-1,ans=-1;
while(l<=r)
{
int mid=(l+r)/2;
if(vec[pos][mid]<=x)
{
ans=vec[pos][mid];
l=mid+1;
}
else
r=mid-1;
}
return ans;
}
ll cal(int a,int b,int c)
{
return 1LL*(a-b)*(a-b)+1LL*(a-c)*(a-c)+1LL*(b-c)*(b-c);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
for(int i=1; i<=3; i++)
scanf("%d",&num[i]);
for(int i=1; i<=3; i++)
{
for(int j=1; j<=num[i]; j++)
{
int x;
scanf("%d",&x);
vec[i].pb(x);
}
sort(vec[i].begin(),vec[i].end());
}
for(int i=1; i<4; i++)
arr[i]=i;
ll ans=inf;
do
{
int l=arr[1],m=arr[2],r=arr[3];
for(int x:vec[m])
{
int index=lower_bound(vec[l].begin(),vec[l].end(),x)-vec[l].begin();
int lmax=-1;
if(index<vec[l].size())
lmax=vec[l][index];
int rmin=Min(x,r);
if(lmax!=-1&&rmin!=-1)
ans=min(ans,cal(x,rmin,lmax));
}
}
while(next_permutation(arr+1,arr+4));
printf("%lld\n",ans);
for(int i=1;i<=3;i++)
vec[i].clear();
}
return 0;
}

博客

最新文章

  1. Hadoop之HDFS文件读写过程
  2. 【单页应用】view与model相关梳理
  3. PhoneGap在iOS开发下的注意事项
  4. 搭建Android 5.0开发环境
  5. CDN-内容推送网络
  6. 使用struts+spring+hibernate组装web应用
  7. 【自用代码】Json转对象
  8. Android入门-Service-start,end,bind,unbind之间的区别
  9. Android模拟器Genymotion安装向导
  10. QT程序启动界面的使用
  11. asp.net在用户控件中使用ClientScript
  12. 其他—cooki和session
  13. androidpn-server笔记及BUG修改
  14. 苹果新的编程语言 Swift 语言进阶(十六)--泛型
  15. log4.net 配置 - StringMatchFilter过滤器的使用
  16. ETC2 区别于ETC的重要点
  17. 并发编程(IO多路复用)
  18. BZOJ.2462.[BeiJing2011]矩阵模板(二维Hash)
  19. Maven属性(properties)标签的使用
  20. [东北师大软工]Week2-作业2:个人项目实战 初步测试结果

热门文章

  1. 解决SpringMVC的乱码问题:CharacterEncodingFilter
  2. 批量重命名脚本(Python)
  3. 【转】动态规划之最长公共子序列(LCS)
  4. MySQL笔记总结-DDL语言
  5. MVC-第一个简单的程序
  6. tensorflow1.0 矩阵相乘
  7. vue.js click点击事件获取当前元素对象
  8. 关于virtualbox配置centos7的网络问题
  9. 2019-2020-1 20199326《Linux内核原理与分析》第二周作业
  10. BareTail 观看文件增加的工具