HihoCoder - 1514 偶像的条件

Posted 晓风微微

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HihoCoder - 1514 偶像的条件相关的知识,希望对你有一定的参考价值。

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi的学校正面临着废校的大危机。面对学校的危机,小Hi同学们决定从ABC三个班中各挑出一名同学成为偶像。  

成为偶像团体的条件之一,就是3名团员之间的身高差越小越好。  

已知ABC三个班同学的身高分别是A1..AN, B1..BM 和 C1..CL。请你从中选出3名同学Ai, Bj, Ck使得D=|Ai-Bj|+|Bj-Ck|+|Ck-Ai|最小。

输入

第一行包含3个整数,N, M和L。  

第二行包含N个整数,A1, A2, ... AN。(1 <= Ai <= 100000000)

第三行包含M个整数,B1, B2, ... BM。(1 <= Bi <= 100000000)

第四行包含L个整数,C1, C2, ... CL。(1 <= Ci <= 100000000)

对于30%的数据, 1 <= N, M, L <= 100  

对于60%的数据,1 <= N, M, L <= 1000  

对于100%的数据,1 <= N, M, L <= 100000

输出

输出最小的D。

样例输入
3 3 3  
170 180 190  
195 185 175  
180 160 200
样例输出
10
 
 
 

题目大意:

如题

分析

先找到一个队列中的数,再用lower_bound找到另外两个队列中大于或等于他们的数。然后3个队列,分成6种情况,分别二分搜索一遍即可。

需要注意,lower_bound如果没有找到返回值不在要搜索的区间范围内

代码:

 1 #include<iostream>
 2 using namespace std;
 3 #include<cstdio>
 4 #include<vector>
 5 #include<functional>
 6 #include<algorithm>
 7 typedef long long ll;
 8 int a[110000],b[110000],c[110000];
 9 int ans=0x7fffffff;
10 void ss(int a[],int b[],int c[],int n,int m,int l)
11 {
12     for (int i=0;i<n;i++)
13     {
14         int pointa=a[i];
15         int pointb=0x7fffffff/4,pointc=0x7fffffff/4;
16         int ptb = lower_bound(b, b+m, pointa)-b;
17         int ptc = lower_bound(c, c+l, pointa)-c;
18         if (ptb>=0&&ptb<m) pointb=b[ptb];
19         if (ptc>=0&&ptc<l) pointc=c[ptc];
20         int zans=abs(pointa-pointb)+abs(pointa-pointc)+abs(pointb-pointc);
21     //    cout<<zans<<" "<<ptb<<" "<<ptc<<" "<<i<<" "<<pointa<<" "<<pointb<<" "<<pointc<<endl;
22         if (ans>zans) ans=zans;
23     }
24 }
25 int main()
26 {
27     int n,m,l;
28     cin>>n>>m>>l;
29     for (int i=1;i<=n;i++)
30     {
31         scanf("%d",&a[i-1]);
32     }
33     for (int i=1;i<=m;i++)
34     {
35         scanf("%d",&b[i-1]);
36     }
37     for (int i=1;i<=l;i++)
38     {
39         scanf("%d",&c[i-1]);
40     }
41     sort(a,a+n);sort(b,b+m);sort(c,c+l);
42     ss(a,b,c,n,m,l);
43     ss(a,c,b,n,l,m);
44     ss(c,b,a,l,m,n);
45     ss(b,a,c,m,n,l);
46     ss(c,a,b,l,n,m);
47     ss(b,c,a,m,l,n);
48     cout<<ans<<endl;
49     return 0;
50 }

以上是关于HihoCoder - 1514 偶像的条件的主要内容,如果未能解决你的问题,请参考以下文章

[Offer收割]编程练习赛15 A.偶像的条件[贪心]

[ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

hihocoder1800

POJ 2186 Popular Cows

hihocoder 1176

hihocoder-1327-分割字符串--贪心