POJ 2010 優先佇列

2021-07-30 11:17:40 字數 628 閱讀 9140

題目大意:有c個牛,每個牛有分數c和學費f,現一共總可以提供f的學費給n個牛,問所有情況中c的中位數最大是多少;

題目解析:首先按照c排序,再列舉每頭牛作為中位數進行判斷,先預處理出l和r陣列,代表第i頭牛左邊和右邊n/2頭牛f總和的最小值;一開始看著書上以為是二分,還能過,其實是不可以的,因為那個條件不滿足二分的性質;

ac**:

#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=100010;

int n,c;

ll f,l[maxn],r[maxn];

struct node

q[maxn];

bool cmp(node a,node b)

else}}

bool ok(int t)

int main()

}if(ans!=-1)

printf("%lld\n",q[ans].c);

else

printf("-1\n");

}return 0;

}

poj 2010(優先佇列)

題意 奶牛大學 奶大招生,從c頭奶牛中招收n頭。它們分別得分score i,需要資助學費aid i。希望新生所需資助不超過f,同時得分中位數最高。求此中位數。解題思路 這裡要求最大中位數,中位數肯定是在這些人中間,故可以列舉中位數,可以先對分數進行排序,然後用二分去找最大中位數。每次列舉的中位數應該...

POJ 2010 優先佇列

參考自 因為是找中位數嘛,所以不必關心這個值的左右到底是誰,只需要知道他可以滿足條件即可 先按照小牛的分數從小到大排個序 然後我們需要維護這個小牛的左邊和右邊 n 2 個小牛的最小資助金額 根據分析,就有了結構體 struct cowa maxn 最後只需要從大到小列舉 need lift righ...

POJ 2010 二叉堆 入門)

好像這題二分也可以做 話說這年頭寫堆都不用heapify 函式的?program p2010 const maxc 100000 maxn 19999 maxaid 100000 maxf 2000000000 type node record a,b longint end heap record...