程式設計思維 week4 作業C TT 的神秘禮物

2021-10-04 03:47:15 字數 1281 閱讀 7431

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 位置對應的數字,』/』 為下取整。

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

輸出新陣列 ans 的中位數。

4

1 3 2 4

31 10 2

1

8

題意即,給定乙個陣列cat,任選其中兩個數作差,並求絕對值,將所有的差的絕對值組成乙個新的陣列ans,求ans的中位數。因為|a-b|=|b-a|,所以可以將題目轉化為將cat公升序排序,任取j>i,求cat[j]-cat[i],組成ans,求其中位數。

暴力做法為將陣列ans算出來,並求其中位數,複雜度為o(n^2),無法接受。

由於已知cat陣列的元素個數n,故可以得出ans陣列的元素個數為n*(n-1)/2,即可求中位數所在位置的下標pos=((n-1)*n/2+1)/2。這樣,求解過程可以用兩個二分實現。

第乙個二分過程,找到中位數。設左邊界l為1,右邊界r為ans中最大的值即cat[n-1]-cat[0]。當l#include

#include

using

namespace std;

int n;

int cat[

100005];

intrank

(int x)

else

} rank+

=(ans-i-1)

;//去除cat[j]-cat[i]<=0的部分

}return rank+1;

}int

find()

else

}return ans;

}int

main()

sort

(cat,cat+n)

;int ans=

find()

;printf

("%d\n"

,ans);}

return0;

}題目鏈結

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

程式設計思維與實踐 Week4 作業

a ddl 的恐懼 zjm 有 n 個作業,每個作業都有自己的 ddl,如果 zjm 沒有在 ddl 前做完這個作業,那麼老師會扣掉這個作業的全部平時分。所以 zjm 想知道如何安排做作業的順序,才能盡可能少扣一點分。請你幫幫他吧!input 輸入包含t個測試用例。輸入的第一行是單個整數t,為測試用...