堆 poj 2010
选n个人从c个中 花费不超过f
c个人的成绩和花费
求分数中位数最大 n是奇数
显然中位数是n/2+1 ~c-n/2之间的(假如存在的话)
用大顶堆维护前n/2个小的花费 求出以这个人为中位数的花费
同理求出后面n/2个人的最小花费
然后判断一下即可
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector> using namespace std;
#define MAXN 100010 struct cow
{
int l,r,sc,co;
}x[MAXN]; struct node//大顶堆
{
int Size;
int z[MAXN];
void clear()
{
Size=;
memset(z,,sizeof(z));
}
bool empty()
{
return Size?:;
}
void shift_up(int a)
{
while(a>)
{
if(z[a]>z[a>>])
{
swap(z[a],z[a>>]);
a=a>>;
}
else
break;
}
}
void shift_down(int a)
{
while((a<<)<=Size)
{
int b=a<<;
if(b<Size&&z[b]<z[b+])
b++;
if(z[a]<z[b])
{
swap(z[a],z[b]);
a=b;
}
else
break;
}
}
int top()
{
return z[];
}
void pop()
{
swap(z[],z[Size]);
Size--;
shift_down();
}
void push(int a)
{
z[++Size]=a;
shift_up(Size);
}
};
bool cmp(cow a,cow b)
{
return a.sc<b.sc;
} int main()
{
int n,c,f;
scanf("%d%d%d",&n,&c,&f);
for(int i=;i<=c;i++)
scanf("%d%d",&x[i].sc,&x[i].co);
sort(x+,x+c+,cmp);
node Q;
Q.clear();
int sum=; for(int i=;i<=n/;i++)
{
Q.push(x[i].co);
sum+=x[i].co;
}
for(int i=n/+;i<=c-n/;i++)
{
x[i].l=sum;
int q=Q.top();
int p=x[i].co;
if(p<q)
{
Q.pop();
sum=sum+p-q;
Q.push(p);
}
}
Q.clear();
sum=;
for(int i=c;i>c-n/;i--)
{
Q.push(x[i].co);
sum+=x[i].co;
}
for(int i=c-n/;i>=n/+;i--)
{
x[i].r=sum;
int q=Q.top();
int p=x[i].co;
if(p<q)
{
Q.pop();
sum=sum+p-q;
Q.push(p);
}
}
int i;
for(i=c-n/;i>=n/+;i--)
if(x[i].co+x[i].l+x[i].r<=f)
break;
if(i>=n/+)
printf("%d\n",x[i].sc);
else
printf("-1\n"); return ;
}
堆 poj 2010的更多相关文章
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
- POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)
POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...
- poj 2010 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(堆维护滑窗kth,二分)
按照score排序,贪心,从左到右用堆维护并且记录前面的最小N/2个花费之和. 然后从右向左枚举中位数,维护N/2个数之和加上并判断是否满足条件.(stl的队列没有clear(),只能一个一个pop. ...
- poj -2010 Moo University - Financial Aid (优先队列)
http://poj.org/problem?id=2010 "Moo U"大学有一种非常严格的入学考试(CSAT) ,每头小牛都会有一个得分.然而,"Moo U&quo ...
- 【POJ 2010 Moo University-Financial Aid】优先级队列
题目链接:http://poj.org/problem?id=2010 题意:C只牛犊,各有自己的分数score和申请的补助aid,现要选出N只(N为奇数),使得其aid的总和不超过F,且按score ...
- poj 2010 Moo University - Financial Aid (贪心+线段树)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 骗一下访问量.... 题意大概是:从c个中选出n个 ...
- Moo University - Financial Aid POJ 2010 优先队列(最大堆)
题目:http://poj.org/problem?id=2010 题目大意: 奶牛上大学.因为经济问题,每头奶牛都需要一定的补助需求,学校会提供一定的资金用于补助 每头牛都有自己的分数,学校招收的名 ...
- 堆 poj 2442
t组数据 n m 给 n*m的矩阵 从每行拿出一个数 可有n^m个组合 求前n小的输出 维护前n小的数组 #include<stdio.h> #include<string.h> ...
随机推荐
- UVA 12716 GCD XOR【异或】
参考:http://www.cnblogs.com/naturepengchen/articles/3952145.html #include<stdio.h> #include<s ...
- 第18章 图元文件_18.2 增强型图元文件(emf)(1)
18.2 增强型图元文件(emf) 18.2.1 创建并显示增强型图元文件的步骤 (1)创建:hdcEMF = CreateEnhMetaFile(hdcRef,szFilename,lpRect,l ...
- for循环与for循环嵌套
今天温习了下分支语句跟for循环,主要讲解了for循环嵌套,这里开始有点迷糊了,整理下思路在做练习 for循环嵌套用我自己的大白话来说就是一个外圈的for程序里面一个套着一个小的for程序,如果在范围 ...
- java 24 - 6 GUI之 创建只能输入数字的文本框
需求: 创建一个含有标签和文本框的窗体,其中文本框只能输入数字 步骤:(大致上) 创建窗体对象 创建标签对象 创建文本框对象 把组件添加到窗体中 设置标签的监听事件,对键盘按下的数据进行监听 设置窗体 ...
- HTML 学习笔记 CSS样式(定位)
CSS定位(Positioning)属性 允许你对元素进行定位. CSS定位和浮动 CSS为定位和浮动提供了一些属性,利用这些属性 可以建立列式布局,将布局的一部分与另一部分重叠.还可以完成多年来通常 ...
- k-d tree 学习笔记
以下是一些奇怪的链接有兴趣的可以看看: https://blog.sengxian.com/algorithms/k-dimensional-tree http://zgjkt.blog.uoj.ac ...
- 移动开发webapp开发常用meta设置手机浏览器全屏模式
1.WebApp全屏模式: <meta name="viewport" content="width=device-width,initial-scale=1.0, ...
- ubuntu Apache 2命令
Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...
- Html5 Egret游戏开发 成语大挑战(五)界面切换和数据处理
经过前面的制作,使用Egret的Wing很快完成了开始界面和选关卡界面,下面通常来说就是游戏界面,但此时界面切换和关卡数据还没有准备好,这次讲解界面的切换和关卡数据的解析.前面多次修改了Main.ts ...
- Eclipse设置和必装插件
文章长期更新,主要是记录Eclipse好用的插件和规范的设置 插件篇: 1. StartExplorer. 在Eclipse内定位项目目录,和打开项目目录下的命令行,总是非常麻烦.有了这个插件以后,这 ...