POJ2833優先佇列

2021-08-17 06:09:31 字數 840 閱讀 3948

….見題號吧

就是說有n個評分,裁判系統需要減去n1個最高分和n2個最低分,然後求出平均分.

n1+n2

由於題給的記憶體大小為10000kb,而乙個5,000,000的陣列需要4*5000000* b = 20000kb

會超出記憶體限制於是,不能存5000000陣列

我們想到用2個優先佇列模擬n1個最大值,和n2個最小值

最後用所有得分的總和減去n1個最大值和n2個最小值.再除以個數.就是平均值.

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

priority_queuevector

,less > small; ///最大堆 -> 彈出最大值,保留最小n2個

priority_queuevector

,greater > big; ///最小堆 -> 彈出最小值,保留最大n1個

int main()

ll temp = 0;

while(!small.empty()) temp += small.top(),small.pop();

while(!big.empty()) temp += big.top(),big.pop();

printf("%.6f\n",1.0*(ans-temp)/(n-n1-n2));

}return

0;}

POJ2833,The Average(優先佇列)

突破口 開兩個優先佇列q ma,q mi,前者維護前n1個最大的數,後者維護後n2個最小的數。原本打算用乙個優先佇列儲存資料,但是如果全部都存的話會爆記憶體,而且還可能會超時,然後就想能不能用乙個優先佇列來存n n1 n2 個數就好 因為最終有效的資料個數就只有n n1 n2 個 這樣就不會爆記憶體...

poj 2833 堆的應用(去若干最大值最小值)

題意 給定一些正數,去掉給定個數的最大值和給定個數的最小值,輸出其餘數字的平均數。思路 建立乙個大頂堆,乙個小頂堆。大頂堆的大小為去掉的最小值個數,存放當前的若干最小值。遍歷資料的同時維護這兩個堆,最後堆中的資料即為需要去掉的資料。輸入 1 2 5 1 2 3 4 5 4 2 10 2121187 ...

poj 2970 優先佇列

先按di排序,從小到大 然後依次完成合同,若發現第i個合同無法在截止日期前完成,便從之前已經完成的任務中選乙個aj最大的合同,付錢來使得這個合同盡快完成。include include include include include using namespace std struct node i...