\(bzeroth\) 大陸最終還是覆滅了,所以你需要為地災軍團服務了。
地災軍團軍師黑袍不擅長寫題面,所以你只需要看簡化版的題意即可。
給定 \(3\) 個長度均為 \(n\) 的正整數序列 \(a\) 、\(b\) 、\(c\) ,要求從三個序列中分別取出 \(3\) 個數 \(a_i\) 、\(b_j\) 、\(c_k\) ,使得 \(| c_k - b_j | + | c_k - a_i | + | b_j - a_i |\) 最小。
第一行乙個正整數 \(n\) 。
第二行 \(n\) 個正整數,第 i 個數為 \(a_i\) 。
第三行 \(n\) 個正整數,第 i 個數為 \(b_i\) 。
第四行 \(n\) 個正整數,第 i 個數為 \(c_i\) 。
輸出\(| c_k - b_j | + | c_k - a_i | + | b_j - a_i |\) 的最小值。
3
170 180 190
195 185 175
180 160 200
10
$ n \leq 152501 $
先對\(a,b,c\) 陣列排序,然後列舉\(a\) 中的元素,很顯然當\(b,c\) 陣列中的數與\(a_i\) 相差最小時答案最小,所以我們二分出\(b\) ,\(c\) 陣列中\(a_i\) 的位置,然後算一算更新答案即可。
#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef pairpii;
#define mem(a,b) memset(a,b,sizeof(a))
inline int read()
while(isdigit(c))
return x*f;
}const int maxn=152510,oo=2147483647;
int n,a[maxn],b[maxn],c[maxn];
ll ans=oo;
bool judge(int k)
printf("%lld",ans);
return 0;
}
NOIP模擬題 最佳旅行
description bsny在杭州旅行,想去 n 個景點,於是他找來 n個導遊,每個導遊負責帶bsny去乙個景點玩一天,因此需要 n 個導遊。這個 n個導遊對於 n 個景點有不同的熟悉度和喜愛度。為了旅遊愉快,bsny想盡量讓每個導遊可以去熟悉度和喜愛度最高的景點,但顯然無法滿足所有導遊,因為b...
noip模擬賽 密碼
表示沒看懂演算法3 問題描述 有壓迫,就有反抗。mored的寵物在法庭的幫助下終於反抗了。作為乙隻聰明的寵物,他打算把魔法使mored的魔法書盜去,奪取mored的魔法能力。但mored怎麼會讓自己的魔法書輕易地被盜取?mored在魔法書上設定了乙個密碼鎖,密碼鎖上有乙個問題。施以斯臥鋪魔法吧,你有...
NOIP模擬賽 老師
題目描述 一座有n層的教學樓裡有一些學生,第i 0 i n 層有studentsi個學生。你被給定了乙個數k,如果第i層有x個學生,那麼這一層需要 x k 個老師。你可以調整每個學生的樓層,但是每個學生至多只能調整一層,就是說第i層的學生只能去第i 1層 如果有的話 第i層 第i 1層 如果i 1 ...