优先队列 POJ 2010
2016-08-03 11:21
225 查看
题意:
有个学校,从c个学生中挑n个学生,要求每个学生的资助金总和<=f
求符合条件的选择方案中中学生成绩中位数的最大值
题解:
有一个lower数组,记录当第i个人是中位数时候,前面的人所需要的资金的最小值,同理有一个upper数组
total是当前最小值
因为这句话保证了当前最小
有个学校,从c个学生中挑n个学生,要求每个学生的资助金总和<=f
求符合条件的选择方案中中学生成绩中位数的最大值
题解:
有一个lower数组,记录当第i个人是中位数时候,前面的人所需要的资金的最小值,同理有一个upper数组
lower[i] = q.size() == half ? total : 0x3f3f3f3f;
total是当前最小值
if (q.size() > half) { total -= q.top(); q.pop(); }
因为这句话保证了当前最小
#include <iostream>
#include <algorithm>
#include <queue>
#include<stdio.h>
#include<string.h>
using namespace std;
#define MAX_COW 100000 + 16
int N, C;
long long F;
pair<int, int> cow[MAX_COW];
int lower[MAX_COW], upper[MAX_COW];
int main()
{
cin >> N >> C >> F;
int half = N / 2;
for (int i = 0; i < C; ++i)
{
scanf("%d%d",&cow[i].first,&cow[i].second);
}
sort(cow, cow + C);
{
int total = 0;
priority_queue<int> q;
for (int i = 0; i < C; ++i)
{
lower[i] = q.size() == half ? total : 0x3f3f3f3f;
q.push(cow[i].second);
total += cow[i].second;
if (q.size() > half) { total -= q.top(); q.pop(); }}
}
{
int total = 0;
priority_queue<int> q;
for (int i = C - 1; i >= 0; --i)
{
upper[i] = q.size() == half ? total : 0x3f3f3f3f;
q.push(cow[i].second);
total += cow[i].second;
if (q.size() > half) { total -= q.top(); q.pop(); }}
}
int result = -1;
for (int i = C - 1; i >= 0; --i)
{
if (lower[i] + cow[i].second + upper[i] <= F)
{
result = cow[i].first;
break;
}
}
printf("%d\n",result);
return 0;
}
相关文章推荐
- poj2010 Moo University - Financial Aid 优先队列
- 堆 POJ - 2010 优先队列 (错误二分)
- POJ 2010 Moo University - Financial Aid (优先队列/二分答案)
- Moo University - Financial Aid (poj 2010 优先队列 或者 二分)
- POJ 2010 Moo University - Financial Aid 优先队列
- 【优先队列】POJ2010- Moo University-Financial Aid
- [POJ 2010]Moo University - Financial Aid[优先队列]
- poj 2010 Moo University - Financial Aid 优先队列
- POJ2010-Moo University - Financial Aid-优先队列
- poj 2010 优先队列~
- [优先队列] POJ2010 Moo University - Financial Aid
- POJ 3159 Candies (差分约束 Dijkstra+优先队列 SPFA+栈)
- POJ 1511 Invitation Cards(单源最短路,优先队列优化的Dijkstra)
- [解题报告]POJ 1521 ZOJ 2399 POJ 3253 哈夫曼树,优先队列
- POJ - 2431 Expedition :贪心+优先队列
- POJ 1511 Invitation Cards (ZOJ 2008) 使用优先队列的dijkstra
- poj 1258 最小生成树 prim+优先队列
- POJ 3253 Fence Repair(STL之优先队列)
- poj2442 Sequenc 优先队列的运用
- poj 2442 Sequence 优先队列的运用