我想根據不同的引數找到一個人的排名,并且每個引數都分配了不同的權重。
例如,假設有三個專案 a、b 和 c,這些專案可以具有 0 到 10,00,000 之間的任何值。分配給它們的權重為 a = 0.3 、b=0.2、c=0.1。假設有 10,000 人擁有這些不同數量的物品。假設一個人 X 有專案 a=2200, b = 4000, c=1280。那么我怎么能找到他所在的 10,000 人中人 x 的排名。
如果需要更多詳細資訊,請告訴我。
立即幫助表示贊賞。
uj5u.com熱心網友回復:
首先,計算所有人員的權重。那是,
P[i] = Wa * a[i] Wb * b[i] Wc * c[i];
然后P[i]按其值對所有內容進行排序。
您可以定義和使用自定義比較函式來輕松獲得排名。
for (int i = 0; i < n; i ) rank[i] = i;
sort (rank, rank n, [P](int i, int j) {
return P[i] < P[j];
});
在動態插入和獲取排名操作的情況下,您必須使用order-statistics tree。然后你可以得到O(logn)兩個操作的性能結果。
有關更多詳細資訊,請參閱codeforces和本文。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/391637.html
上一篇:是否有一種演算法可以找到給出一些輸入和結果的所需操作?
下一篇:編程雙胞胎重聚的概率
