一、题面

POJ2010

二、分析

堆预处理

首先可以考虑吧随便取一个点,判断两侧的最小的总费用是多少,然后相加判断是否满足条件。如果直接判断会超时,所以需要用大根堆预处理一下。先看从分数最小的往最大的预处理,先取N/2个相加,并把他们都加入到堆中,先假设这个和值是最大的,然后不断往后扫描的过程中,不断更新大根堆的根值,以及它的和。反向预处理类似。比较容易出错的是选的范围,如果不用那些不可能到的点,可以随意点,但如果需要使用这些点,需要用足够大的值填充。

三、AC代码

 #include <cstdio>
#include <algorithm>
#include <queue>
#include <fstream>
#include <iostream> using namespace std; const int MAXN = 1e5+;
int N, C, F, ans;
struct Node
{
int score, aid;
bool operator<(const Node t)const
{
return score < t.score;
}
}Calves[MAXN];
int Left[MAXN], Right[MAXN]; void solve()
{
priority_queue<int, vector<int>, less<int> > pql, pqr;
int i, temp, sum = ;
//正向扫描求最小和,保持大根堆的容量始终为N/2
for(i = ; i < N/; i++)
{
sum += Calves[i].aid;
Left[i] = ;
pql.push(Calves[i].aid);
}
for(i; i < C-N/; i++)
{
Left[i] = sum;
temp = pql.top();
if(Calves[i].aid < temp)
{
pql.pop();
sum -= temp;
sum += Calves[i].aid;
pql.push(Calves[i].aid);
}
} //反向扫描
sum = ;
for(i = C-; i > C-N/-; i--)
{
sum += Calves[i].aid;
Right[i] = ;
pqr.push(Calves[i].aid);
}
for(i; i >= N/; i--)
{
Right[i] = sum;
temp = pqr.top();
if(Calves[i].aid < temp)
{
pqr.pop();
sum -= temp;
sum += Calves[i].aid;
pqr.push(Calves[i].aid);
}
} } int main()
{
// freopen("input.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
while(scanf("%d %d %d", &N, &C, &F)!=EOF)
{
bool flag = false;
for(int i = ; i < C; i++)
{
scanf("%d %d", &Calves[i].score, &Calves[i].aid);
}
sort(Calves, Calves+C);
solve();
for(int i = C-N/-; i >= N/; i--)
{
if(Right[i] + Left[i] + Calves[i].aid <= F)
{
printf("%d\n", Calves[i].score);
flag = true;
break;
}
}
if(!flag)
{
printf("-1\n");
}
}
return ;
}

POJ_2010 Moo University - Financial Aid 【堆预处理】的更多相关文章

  1. Divide and conquer:Moo University - Financial Aid(POJ 2010)

    Moo University - Financial Aid 其实是老题了http://www.cnblogs.com/Philip-Tell-Truth/p/4926008.html 这一次我们换二 ...

  2. Moo University - Financial Aid

    Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...

  3. poj 2010 Moo University - Financial Aid

                                                                                                Moo Univ ...

  4. POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)

    POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...

  5. 【POJ - 2010】Moo University - Financial Aid(优先队列)

    Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...

  6. poj 2010 Moo University - Financial Aid 最大化中位数 二分搜索 以后需要慢慢体会

    Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6599   A ...

  7. poj 2010 Moo University - Financial Aid(优先队列(最小堆)+ 贪心 + 枚举)

    Description Bessie noted that although humans have many universities they can attend, cows have none ...

  8. poj2010 Moo University - Financial Aid 优先队列

    Description Bessie noted that although humans have many universities they can attend, cows have none ...

  9. POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆

    考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...

随机推荐

  1. /error处理

    1 BasicErrorController 1.1 简述 SpringMVC框架在出现错误时有一个默认的错误请求 /error:出现异常之后执行/error请求之前框架会判断出现异常的请求类型,然后 ...

  2. OpenNebula 深入分析

    -------------------OpenNebula 深入分析------------------- #容量清单 属性 描述 NAME 如果名字是空的,那么默认名字是:one-<VID&g ...

  3. Django框架 之 admin管理工具(组件使用)

    Django框架 之 admin管理工具(组件使用) 浏览目录 激活管理工具 使用管理工具 admin的定制 admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理 ...

  4. python,itertools模块

    itertools模块的使用: # coding=utf-8 """ itertools模块 """ import itertools im ...

  5. Java 扫描器类 Scanner类

    1.Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.Scanner reader=new Scanner(System.in); 2.reader对象调用下列方法(函数),读取用户 ...

  6. C#隐式FTPS (Implicit FTPS)

    實現的方式是通過第三方程式庫實現的,當然最主要的是開源且免費,已測試過沒有問題! 目前還沒有直接取得目錄FileInfo list的方法,不過還好可以用GetDirectoryList來取得類似的結果 ...

  7. Eclipse平台下配置Go语言开发环境(Win7)

    <Go语言编程>中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse.LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEcl ...

  8. 使用Filter对POST和GET方式的请求参数的进行统一解码

    一.过滤器 二.自定义request类

  9. VSCode调试C#控制台与单元测试

    公司前端最近项目里面在用VSCode编写前端代码,觉得这个编辑器很轻便,既然是微软出的,肯定支持C#,就去网上查了查资料,发现还真是支持C#,并且蛮多地方用到dotnet命令,哈哈. 1.powers ...

  10. 6步完成压力测试工具Locust部署和使用

    1,准备安装python,安装过程略 已安装的,查看安装目录: cmd输入where Python 2,pip安装locust 1.进入python所在目录,如果没有配置环境变量,需要进入到C:\Us ...