Week4 C TT的神秘禮物

2022-06-22 08:45:08 字數 1589 閱讀 9415

題目大意:

tt 是一位重度愛貓人士,每日沉溺於 b 站上的貓咪頻道。

有一天,tt 的好友 zjm 決定交給 tt 乙個難題,如果 tt 能夠解決這個難題,zjm 就會買乙隻可愛貓咪送給 tt。

任務內容是,給定乙個 n 個數的陣列 cat[i],並用這個陣列生成乙個新陣列 ans[i]。新陣列定義為對於任意的 i, j 且 i != j,均有 ans = abs(cat[i] - cat[j]),1 <= i < j <= n。試求出這個新陣列的中位數,中位數即為排序之後 (len+1)/2 位置對應的數字,'/' 為下取整。

tt 非常想得到那只可愛的貓咪,你能幫幫他嗎?

input

多組輸入,每次輸入乙個 n,表示有 n 個數,之後輸入乙個長度為 n 的序列 cat, cat[i] <= 1e9 , 3 <= n <= 1e5

output

輸出新陣列 ans 的中位數

sample input

4

1 3 2 4

31 10 2

sample output

1

8思路:兩次二分-淋漓盡致

這道題目知道是用二分的思想做,但是做的時候卻卡了好幾天,怎麼二分呢?

這個時候就要回到中位數的定義中去:大小排序後最中間位置,即(n*(n-1)/2+1)/2

新陣列中最大數為原陣列中最大數與最小數之差,然後可以對這個值二分。要判斷其在新陣列中的位置,即找在新陣列中有多少比他大或小。

這一步又要用到二分的思想,對於固定的數,找滿足條件的數的個數(原陣列二分 找滿足差的個數 )

1/*2

name: 34

author:sduallen

5date: 19/03/20 11:44

6description: 7*/

89 #include10 #include11 #include12 #include13

using

namespace

std;

1415

//const int max = 1e5+1;

16int *cat = new

int[100001

];17

intn;

18int last_index(int start)

26else

27 r=mid-1;28

}29return

index;30}

3132

intmain()

50if(cnt >=ans_mid)

54else

55 l=mid+1;56

}57 printf("

%d\n

",themid); 58}

59return

0;

60 }

Week4 C TT 的神秘禮物

給定乙個 n 個數的陣列 cat i 並用這個陣列生成乙個新陣列 ans i 新陣列定義為對於任意的 i,j 且 i j,均有 ans abs cat i cat j 1 i j n。試求出這個新陣列的中位數,中位數即為排序之後 len 1 2 位置對應的數字,為下取整。多組輸入,每次輸入乙個 n,...

week4 C TT的神秘禮物

tt 是一位重度愛貓人士,每日沉溺於 b 站上的貓咪頻道。有一天,tt 的好友 zjm 決定交給 tt 乙個難題,如果 tt 能夠解決這個難題,zjm 就會買乙隻可愛貓咪送給 tt。任務內容是,給定乙個 n 個數的陣列 cat i 並用這個陣列生成乙個新陣列 ans i 新陣列定義為對於任意的 i,...

week4 C TT的神秘禮物

tt 是一位重度愛貓人士,每日沉溺於 b 站上的貓咪頻道。有一天,tt 的好友 zjm 決定交給 tt 乙個難題,如果 tt 能夠解決這個難題,zjm 就會買乙隻可愛貓咪送給 tt。任務內容是,給定乙個 n 個數的陣列 cat i 並用這個陣列生成乙個新陣列 ans i 新陣列定義為對於任意的 i,...