小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 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...