week4 C TT的神秘禮物

2021-10-04 03:57:33 字數 1152 閱讀 4360

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 非常想得到那只可愛的貓咪,你能幫幫他嗎?

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

輸出新陣列 ans 的中位數

41 3 2 4

31 10 218

ans=abs(cat[i]-cat[j])當把cat陣列進行排序後,絕對值便可去掉,即ans=cat[i]-cat[j],若ans中的中位數,即使找到符合cat[i]-cat[j]<=mid的數量為ans陣列總數量的一半即(len+1)/2,向下取整。為了減少複雜度,採用兩次二分加一次for迴圈,最先一次的二分是在cat[i]-cat[j]的最小值和最大值中進行二分,然後,此次二分的條件為返回的cat[i]-cat[j]<=mid的數量(寫成乙個函式),在此函式中,對j進行for迴圈遍歷,對i進行二分求解,二分條件為是否滿足cat[i]-cat[j]<=mid。對於每個j值,都要將符合條件的數量進行儲存,最終將所有的數量和返回。

#include

#include

#include

#include

using

namespace std;

intf

(int

,int*,

int)

;int

main()

else

} cout << ans << endl;

}return0;

}intf(

int x,

int a,

int n)

ans +

= high- i;

}return ans;

}

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,...