Moo University - Financial Aid [POJ2010] [堆]
题意:
在C头牛里选N头牛,每头牛需要花掉一定经费ai才能得到一定得bi分,在不超过经费F的情况下,使得N头牛的得分中位数最大。(1 <= N <= 19,999,奇数) (N <= C <= 100,000)(0 <= F <= 2,000,000,000)
输入:(N,C,F;ai,bi)
3 5 70
30 25
50 21
20 20
5 18
35 30
输出:
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define RG register int
#define rep(i,a,b) for(RG i=a;i<=b;++i)
#define per(i,a,b) for(RG i=a;i>=b;--i)
#define ll long long
#define inf (1<<29)
#define maxn 100005
using namespace std;
int n,m,F,L,R,rt;
int sL,sR;
int po[maxn];
struct D{
int cost,sco;
inline int operator < (const D &tmp)const{
return sco<tmp.sco;
}
}a[maxn];
struct Dat{
int val,id,usd;
inline int operator < (const Dat &tmp)const{
return (val==tmp.val)?id<tmp.id:val<tmp.val;
}
}b[maxn];
priority_queue<int> que;
inline int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void work()
{
L=(m+)/,R=n-(m-)/; int end=(*n-m+)/;
per(i,n,end) que.push(a[i].cost),sR+=a[i].cost; end=(*n-m-)/,rt=(m-)/;
rep(i,,end) b[i].val=a[i].cost,b[i].id=i;
sort(b+,b++end);
rep(i,,end) po[b[i].id]=i;
rep(i,,rt) sL+=b[i].val; end=(*n-m+)/;
per(O,R,L)
{
if(sL+sR+a[O].cost<=F) {printf("%d\n",a[O].sco);return;} if(a[O].cost<que.top()) sR-=que.top()-a[O].cost,que.pop(),que.push(a[O].cost); b[po[O-]].usd=;
if(po[O-]<=rt)
{
while(b[rt].usd&&rt<=end) rt++;
if(rt==(*n-m+)/) {puts("-1");return;}
sL+=b[rt].val-a[O-].cost;
}
}
puts("-1");return;
} void dif()
{
per(i,n,)
if(a[i].cost<=F){printf("%d\n",a[i].sco);return;}
exit(); } int main()
{
m=read(),n=read(),F=read();
rep(i,,n) a[i].sco=read(),a[i].cost=read();
sort(a+,a++n);
L=(m+)/,R=n-(m-)/;
if(m==) dif();
else work();
return ;
}
Moo University - Financial Aid [POJ2010] [堆]的更多相关文章
- POJ_2010 Moo University - Financial Aid 【堆预处理】
一.题面 POJ2010 二.分析 堆预处理 首先可以考虑吧随便取一个点,判断两侧的最小的总费用是多少,然后相加判断是否满足条件.如果直接判断会超时,所以需要用大根堆预处理一下.先看从分数最小的往最大 ...
- POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
按照score排序,贪心,从左到右用堆维护并且记录前面的最小N/2个花费之和. 然后从右向左枚举中位数,维护N/2个数之和加上并判断是否满足条件.(stl的队列没有clear(),只能一个一个pop. ...
- 【POJ - 2010】Moo University - Financial Aid(优先队列)
Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...
- 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 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 ...
随机推荐
- 2017-2018-2 20165206 实验二《Java面向对象程序设计》实验报告
2017-2018-2 20165206 实验二<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:韩啸 学号:20165206 指导教 ...
- STL容器之优先队列
STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列 ...
- WPF 下两种图片合成或加水印的方式(转载)
来源:http://www.cnblogs.com/lxblog/ 最近项目中应用多次应用了图片合成,为了今后方便特此记下. 在WPF下有两种图片合成的方式,一种还是用原来C#提供的GDI+方式,命名 ...
- 安全测试robots
http://stock.pingan.com/robots.txt
- DC3求后缀数组板子
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...
- 039 在weblogic下部署jndi的多数据源
这个问题,在公司遇到了,一直没有学,今天学了一下. 后续,还要实验一下,暂时粘贴一下一个不错的url:https://www.cnblogs.com/xdp-gacl/p/4201094.html
- 003 使用SpringMVC开发restful API--查询用户
一:介绍说明 1.介绍 2.restful api的成熟度 二:编写Restful API的测试用例 1.引入spring的测试框架 在effective pom中查找 2.新建测试包,测试类 3.测 ...
- LoadRunner的函数
一.基础函数 在VU左边导航栏中,有三个LR框架函数,分别是vuser_init(),Action(),vuser_end(). 这三个函数存在于任何Vuser类型的脚本中: ●vuser_init ...
- liunx命令简介
图形界面和命令行要达到的目的是一样的,都是让用户控制计算机.然而,真正能够控制计算机硬件(CPU.内存.显示器等)的只有操作系统内核(Kernel),图形界面和命令行只是架设在用户和内核之间的一座桥梁 ...
- Flume配置文件写法总结
一.agent 第一步是定义agent(代理)及agent下的sources.channels.sinks的简称,如下: a1.sources = r1 a1.sinks = k1 a1.channe ...