POJ 2010 Moo University - Financial Aid (优先队列)
题意:从C头奶牛中招收N(奇数)头。它们分别得分score_i,需要资助学费aid_i。希望新生所需资助不超过F,同时得分中位数最高。求此中位数。
思路:
先将奶牛排序,考虑每个奶牛作为中位数时,比它分数低(前面的)的那群牛的学费总和lower_i,后面的总和upper_i。然后从分数高往分数低扫描,满足aid_i + lower_i + upper_i <= F的第一个解就是最优解
- #include <iostream>
- #include <algorithm>
- #include <queue>
- using namespace std;
- #define MAX_COW 100000 + 16
- int N, C, F;
- pair<int, int> cow[MAX_COW];
- // 牛i作为中位数时,lower[i]表示分数低于它的牛的学费总和,upper[i]表示分数高于它的牛的学费总和
- int lower[MAX_COW], upper[MAX_COW];
- int main()
- {
- cin >> N >> C >> F;
- int half = N / 2;
- for (int i = 0; i < C; ++i)
- {
- cin >> 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;
- for (int i = C - 1; i >= 0; --i)
- {
- if (lower[i] + cow[i].second + upper[i] <= F)
- {
- result = cow[i].first;
- break;
- }
- }
- cout << result << endl;
- return 0;
- }
POJ 2010 Moo University - Financial Aid (优先队列)的更多相关文章
- POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)
POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...
- poj -2010 Moo University - Financial Aid (优先队列)
http://poj.org/problem?id=2010 "Moo U"大学有一种非常严格的入学考试(CSAT) ,每头小牛都会有一个得分.然而,"Moo U&quo ...
- POJ 2010 Moo University - Financial Aid 优先队列
题意:给你c头牛,并给出每头牛的分数和花费,要求你找出其中n(n为奇数)头牛,并使这n头牛的分数的中位数尽可能大,同时这n头牛的总花费不能超过f,否则输出-1. 思路:首先对n头牛按分数进行排序,然后 ...
- poj 2010 Moo University - Financial Aid
Moo Univ ...
- 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 ...
- POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆
考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...
- poj 2010 Moo University - Financial Aid (贪心+线段树)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 骗一下访问量.... 题意大概是:从c个中选出n个 ...
- POJ 2010 Moo University - Financial Aid treap
按第一关键字排序后枚举中位数,就变成了判断“左边前K小的和 + 这个中位数 + 右边前K小的和 <= F",其中维护前K小和可以用treap做到. #include <cstdi ...
随机推荐
- JS在Html中使用JavaScript
一.三种方式 1)<script>元素 2)外部文件 3)文档模式 二.<script>元素 是向HTML页面插入JavaScript的主要方法:HTML 4.01为<s ...
- shell反弹总结
NC反弹 常用的命令: -l 监听模式 -n 指定数字的IP地址 -p port(本地端口) -s addr 本地源地址 -v 详细输出 -i secs 延时的间隔 -e filename ...
- luogu 1064 金明的预算方案
01背包 变形,有主附件的背包内则更改决策 original: 1) 不选 2)选,f[j-w[i]]+v[i] now : 1)不选 2)选主 3)主 附1 4)主 附2 ...
- OracleHelper与SqlServerHelper
1.OracleHelper using System; using System.Data; using System.Configuration; using System.Linq; using ...
- Node.js的基本操作(使用Vue前必学)
安装 Windows下不需要讲,Mac下的安装步骤: https://www.cnblogs.com/bobi1234/category/1367458.html 全局安装淘宝镜像 npm insta ...
- SpringBoot处理静态资源的两种方式
静态资源是指----> CSS.JS之类的文件 首先创建SpringBoot Web项目 添加Spring Boot Web Starter <dependency> <gro ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
- jvm系列六、windows用jdk自带工具jps、jstack找出性能最差的代码
一.运行程序TestGC 二.用jps找出当前应用的进程号PID 到jdk安装目录的bin目录下输入: jps -l PID为1264 三.启动Process Explorer(下载地址:https: ...
- SharePoint 2010:“&”作为SharePoint账号密码引起的错误
一朋友修改了SharePoint 2010系统账号密码,导致无法登陆.他的环境如下: 两台服务器:AD+SharePoint 2010 ,Sql Server 2008 r2 目标站点开启了Form登 ...
- tomcat apr
背景 前面也提过了,这次是在linux下的实验.不要信广告,要看疗效.其实起不了都大作用. 转载 开始安装~ 1)安装apr tar zxvf apr-1.4.2.tar cd ...