HihoCoder 1514 偶像的條件(二分法)

2021-08-21 06:09:21 字數 1602 閱讀 5134

小hi的學校正面臨著廢校的大危機。面對學校的危機,小hi同學們決定從abc三個班中各挑出一名同學成為偶像。  

成為偶像團體的條件之一,就是3名團員之間的身高差越小越好。  

已知abc三個班同學的身高分別是a1..an, b1..bm 和 c1..cl。請你從中選出3名同學ai, bj, ck使得d=|ai-bj|+|bj-ck|+|ck-ai|最小。

input

第一行包含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

output

輸出最小的d。

sample input

3 3 3  

170 180 190

195 185 175

180 160 200

sample output

10
讀入a,b,c後,用sort對三個陣列進行排序,去掉b,c中的重複元素。使b,c變成單調遞增序列。

遍歷a,對每個a[i]求與它絕對值相差最小的b,c。用二分找出b離a[i]最近的兩個數。取其中最近的乙個。c同理

對於每個a[i]把解放入陣列key中,最後對key用sort排序。key[0]就是答案。

#include#include#include#include #includeusing namespace std;

#define maxn 100000

int a[maxn+10],b[maxn+10],c[maxn+10];

int a1[maxn+10],b1[maxn+10],c1[maxn+10];

int key[maxn+10];

int f(int a,int b)

int absolutevalue(int a,int b,int c)

int main()

else if(b[mid]f(b[right],a[i]))

b=b[right];

else

b=b[left];

}if(a[i]<=c[0])

c=c[0];

else if(a[i]>=c[l-1])

c=c[l-1];

else

else if(c[mid]f(c[right],a[i]))

c=c[right];

else

c=c[left];

}key[i]=absolutevalue(a[i],b,c);

}sort(key,key+n);

printf("%d\n",key[0]);

return 0;

}

Hihocoder 1514 偶像的條件

解題思路 其實就是隨意搞下就行。求 a b b c c a 的最小值 顯然列舉a,然後二分整個找到離a最近的b,再二分整個找到離a最近的c和離b最近的c 比較一下誰最近,就可以o nlogn 搞出來了。include include include include include include i...

HihoCoder 1514 偶像的條件

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 小hi的學校正面臨著廢校的大危機。面對學校的危機,小hi同學們決定從abc三個班中各挑出一名同學成為偶像。成為偶像團體的條件之一,就是3名團員之間的身高差越小越好。已知abc三個班同學的身高分別是a1.an,b1.bm 和 c...

Hihocoder 1128 二分 二分查詢

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...