POJ_2010 Moo University - Financial Aid 【堆预处理】
一、题面
二、分析
堆预处理
首先可以考虑吧随便取一个点,判断两侧的最小的总费用是多少,然后相加判断是否满足条件。如果直接判断会超时,所以需要用大根堆预处理一下。先看从分数最小的往最大的预处理,先取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 【堆预处理】的更多相关文章
- Divide and conquer:Moo University - Financial Aid(POJ 2010)
Moo University - Financial Aid 其实是老题了http://www.cnblogs.com/Philip-Tell-Truth/p/4926008.html 这一次我们换二 ...
- Moo University - Financial Aid
Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...
- poj 2010 Moo University - Financial Aid
Moo Univ ...
- POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)
POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...
- 【POJ - 2010】Moo University - Financial Aid(优先队列)
Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...
- poj 2010 Moo University - Financial Aid 最大化中位数 二分搜索 以后需要慢慢体会
Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6599 A ...
- poj 2010 Moo University - Financial Aid(优先队列(最小堆)+ 贪心 + 枚举)
Description Bessie noted that although humans have many universities they can attend, cows have none ...
- poj2010 Moo University - Financial Aid 优先队列
Description Bessie noted that although humans have many universities they can attend, cows have none ...
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
随机推荐
- HTTP 协议中 URI 和 URL 有什么区别?
HTTP 协议中 URI 和 URL 有什么区别? HTTP = Hyper Text Transfer ProtocolURI = Universal Resource IdentifierURL ...
- mybatis spring 框架整合
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=LF password=LF <?xml versi ...
- [转]asp.net使用uploadify上传出现的IO Error问题
原文链接:http://blog.csdn.net/w3031213101/article/details/6335878 解决方法:1.uploadify控件的自定义size必须调整大小,即属性:s ...
- 清除Vs2010的工作区影射关系的缓存信息的文件夹路径
C:/Users/Administrator/AppData/Local/Microsoft/Team Foundation/3.0/Cache
- rest-framework-----视图
一:基本视图 写一个出版社的增删改查的resful接口 路由: url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P& ...
- App测试从入门到精通之安装、卸载和运行测试
关于手机App测试需要说的点有很多.目前市场上主要的APP测试主要是针对的是安卓.和苹果两大主流操作系统.主要考虑的就是功能性.兼容性.稳定性.性能测试等.我们看下App的安装和卸载有哪些常用的场景: ...
- MVC值提供组件ValueProvider的继承关系
MVC请求过程中中各组件调用顺序:值提供组件(IValueProvider)->模型绑定组件(IModelBinder)->模型验证组件 值提供组件接口 public interface ...
- 基本滤波算法比较 (转载http://blog.sina.com.cn/s/blog_69f2aa5a01014du5.html)
最近在做关于数据采集方面的东西,这就不免涉及到了滤波的算法,在网上找到了关于几种算法的比较. 数字滤波方法有很多种,每种方法有其不同的特点和使用范围.从大的范围可分为3类. 1.克服大脉冲干扰的数字滤 ...
- Java 线程不安全问题分析
当多个线程并发访问同一个资源对象时,可能会出现线程不安全的问题 public class Method implements Runnable { private static int num=50; ...
- 激光样式——第九届蓝桥杯C语言B组(国赛)第二题
原创 标题:激光样式x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱.安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!国王很想知道,在目前这种bug存在的情况下, ...