生日派對分餅 中位數(二分)

2021-10-03 03:37:12 字數 2134 閱讀 7790

給定n個數字,x1,x2,……xn,讓我們計算每一對數的差值:|xi-xj| (1 ≤ i < j ≤ n),可以獲得c(n,2)個數的中位數(即n*(n-1)/2個)

在每個測試用例中,n將在第一行給出。然後ñ編號給予,表示x 1,x 2,…,x ñ,( xi ≤ 1,000,000,000 , 3 ≤ n ≤ 1,00,000 )

在單獨的行中輸出中值

41 3 2 4

31 10 218

n個數兩兩做差會得到c(n,2)個差值,求這些差值的中位數

第一眼看到的想法就是把所有的差值求出,再找中位數,但一看資料n最大可以去到100000兩兩求差值n2必超時。中位數前後的前後的元素個數要麼一樣多(n為奇數),要麼差乙個(n為偶數),於是我們可以對這個中位數的值進行二分,滿足條件的就是這組資料的中位數,那麼問題來了怎麼求差值,都求出來肯定不行,會超時,那我們就一邊求一邊判斷(記得這個時候先把陣列排個序,差值一旦大於二分出來的mid,就不用再求後面的了,越來越大了呀)把小於mid的進行計數,最後判斷這個mid符不符合中位數的條件,然後就是二分的老套路了

#include

#include

#include

using

namespace std;

int a[

100010];

int n,ans;

intjudge

(int mid)

if(cnt>=ans)

//將計得的數與中位數的條件比較看能否成為中位數

return1;

else

return0;

}int

main()

printf

("%d\n"

,right);}

}

在我的生日派對上有n個餅,每個餅的大小不同,有許多朋友來參加我的生日派對,他們每乙個人都得到了一塊餅,如果其中有乙個的餅比另乙個人的大,他們就會抱怨,所以所有的餅應該分成相同的大小,當然了,我自己也要一塊餅,而且那塊也應該是同樣的大小,我們所有人可能得到的最大尺寸的餅是多少?我做的餅都是圓柱形的,高度都是1,但是半徑可以不一樣。

一行為正整數:測試用例的組數

然後對於每個測試用例:一行帶有兩個整數n,f帶有1<=n,f<=10000表示餅的數目和好友的數目。

一行n個整數ri,1<=ri<=10000:餅的半徑。

對於每個測試用例,輸出一行具有最大可能的數值,這樣我和我的朋友都可以得到一塊大小為v的餅。答案應該以浮點數給出,絕對誤差最多為10^(-7)保留6位小數。

33 3

4 3 3

1 24

510 5

1 4 2 3 4 5 6 5 4 2

25.132741

3.141593

50.265482

n+1個人分餅,餅不止乙個,每個人的餅要一樣大,求每個人分的餅最大有多大

這個類似之前寫的那個切繩子,二分過程一樣,兩道題都卡了精度,這裡是給出了絕對誤差的最大值,一開始沒能理解這個,**會有誤差存在呢,其實就是二分越往後分right和left靠的越來越近,這個地方能出現誤差,所以我們可以讓right和left的差值小於10-7時結束while。還有就是這題精度比較高要六位小數,所以π的值還是搞精確點用acos(-1)來表示。

#include

#include

#include

#include

#define pi acos(-1)

using

namespace std;

double v[

100010];

int n,f;

intcut

(double mid)

if(cnt>=f)

return1;

else

return0;

}int

main()

double left=

0,mid,right=maxn;

while

(right-left>=

1e-7

)//允許誤差範圍

printf

("%.6lf\n"

,mid)

;//保留六位小數

}return

0;}

中位數(DP 二分)

單點時限 10.0 sec 記憶體限制 256 mb 你的地圖是一張白紙,所以即使想決定目的地,也不知道路在 qq 小方最近在自學圖論。他突然想出了乙個有趣的問題 一張由 n 個點,m 條邊構成的有向無環圖。每個點有點權 ai。qq 小方想知道所有起點為 1 終點為 n 的路徑中最大的中位數是多少。...

樹狀陣列 二分 中位數之中位數

給出乙個長度為 n 的序列 a 首先求出其所有區間的中位數,將這些中位數構成的集合記為 s 求 s 中所有數的中位數。此題中位數指 有 n 個數,第 left lfloor frac right rfloor 1 個數即為中位數。資料範圍 1 leq n leq 10 5,1 leq a i leq...

最大中位數 二分

給定乙個由 n n n 個整數組成的陣列 a a a,其中 n n n 為奇數。你可以對其進行以下操作 選擇陣列中的乙個元素 例如 a i a i 將其增加 1 1ai 1 你最多可以進行 k k 次操作,並希望該陣列的中位數能夠盡可能大。奇數長度的陣列的中位數是陣列以非降序排序後的中間元素。例如,...