按照score排序,贪心,从左到右用堆维护并且记录前面的最小N/2个花费之和。

然后从右向左枚举中位数,维护N/2个数之和加上并判断是否满足条件。(stl的队列没有clear(),只能一个一个pop...

复杂度O(nlogn)

也可以二分。先按照score排序,记录备份牛在排序后的下标。然后将备份按照资金排序,

,二分中位数的值,对于mid值,按照备份顺序贪心选择牛,根据之前的下标判断在左边或者右边。

因为是最贪心的选,如果两边都不够,说明无解。如果某一边少了,mid就应该往相反的方向移动。

如果满足条件就记录答案,并向上缩小区间。

复杂度也是O(nlogn)

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
//#include<bits/stdc++.h>
using namespace std;#define PB push_back
#define MP make_pair
#define fi first
#define se second
#define PS pushconst int maxn = 1e5+5;
const int maxsz = 1e4+5;
struct BinaryHEAP
{int Heap[maxsz];int sz;#define Cmp(a,b) ((a)>(b))void push(int x){int i = ++sz;while(i > 1){int p = i>>1;if(!Cmp(x,Heap[p])) break;Heap[i] = Heap[p];i = p;}Heap[i] = x;}void pop(){int x = Heap[sz--];int i = 1;while((i<<1)<=sz){int a = i<<1, b = i<<1|1;if(b<=sz && Cmp(Heap[b],Heap[a])) a = b;if(!Cmp(Heap[a],x)) break;Heap[i] = Heap[a];i = a;}Heap[i] = x;}int top(){ return Heap[1]; }//int operator[](int x){ return Heap[x]; }
}q;pair<int,int> cow[maxn];
int N, C, F;
int Half;
int preSum[maxn];int sol()
{sort(cow,cow+C);int Half = N>>1, sum = 0;for(int i = 0; i < Half; i++) {sum += cow[i].se;q.push(cow[i].se);}for(int i = Half; i < C-Half; i++){preSum[i] = sum;if(q.top() > cow[i].se) {sum -= q.top();q.pop();sum += cow[i].se;q.push(cow[i].se);}}q.sz = 0;sum = 0;for(int i = C-Half; i < C; i++) {sum += cow[i].se;q.push(cow[i].se);}for(int i = C-Half; --i >= Half; ){if(sum + preSum[i] + cow[i].se <= F) return cow[i].fi;if(q.top() > cow[i].se) {sum -= q.top();q.pop();sum += cow[i].se;q.push(cow[i].se);}}return -1;
}//#define LOCAL
int main()
{
#ifdef LOCALfreopen("in.txt","r",stdin);
#endifscanf("%d%d%d",&N,&C,&F);for(int i = 0; i < C; i++){scanf("%d%d",&cow[i].fi,&cow[i].se);}printf("%d\n",sol());return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4889437.html

POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)相关推荐

  1. POJ 2010 Moo University - Financial Aid【堆的应用】

    题意: 给出 n  个人,知道了每个人的成绩,和每个人想要的奖学金,要求从这些学生中找出 m (奇数)个人满足选出的人的成绩的中位数最大,且这些人总的奖学金需求要 小于等于总的奖学金数. 分析: 可以 ...

  2. bzoj 3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助(set+贪心)

    3372: [Usaco2004 Feb]Moo University -- Financial Aid 财政补助 Time Limit: 10 Sec  Memory Limit: 128 MB S ...

  3. POJ2010 Moo University - Financial Aid

    题目链接:https://vjudge.net/problem/POJ-2010 题目大意: 有 \(C\) 头牛,每头牛有一个分数和需要资助的钱.现在要资助 \(N\) 头牛,总资助金额不能超过 \ ...

  4. POJ2010 Moo University - Financial Aid 优先队列

    题目大意是有一批学生上大学,但是需要一些奖学金才上得起,学校给的奖学金aid有限,并且学校的教室只能让N个学生来上学,N为奇数,所以学校希望在在所有参加入学考试的C名学生中选取N个学生,为了提高教学质 ...

  5. Poj 2010-Moo University - Financial Aid

    Moo University - Financial Aid 题目链接:http://poj.org/problem?id=2010 Time Limit: 1000MS   Memory Limit ...

  6. POJ - 2008 Moo University - Team Tryouts

    题目描述 给定dn组数据, 数据包括w, h, 给定a, b, c; 求一个子集, 子集里面所有的元素都满足A*(H-h) + B*(W-w) <= C w为子集里面最小的w , h表示子集里面 ...

  7. POJ 2231 Moo Volume(递推、前缀和)

    题外话: POJ 2231 Moo Volume 题意: 解题过程: AC代码: 题外话: emm--第三套题好像综合了其他OJ的题目蛤,那么我就把题目分开了发了蛤蛤-- POJ 2231 Moo V ...

  8. 【BZOJ1826】【tyvj2644】缓存交换,贪心+堆维护

    传送门1 传送门2 写在前面:Shallwe回家养病依然努力刷题,实乃我辈楷模 思路:比较容易想到的贪心思路(虽然一开始我对这个思路有点虚,因为太弱不会证明,大体理解一下就好= =),用堆维护一下ne ...

  9. POJ 1442 Black Box(大小堆,求第K小的元素)

    文章目录 1. 题目链接 2. 题目解读 3. 代码 3.1 Runtime Error 代码 1. 题目链接 http://poj.org/problem?id=1442 2. 题目解读 可以利用大 ...

最新文章

  1. C++中栈和堆上建立对象的区别
  2. 第59件事 运营驱动产品调优案例
  3. [原创] MAME架构、编译及配置浅析
  4. SQL_CALC_FOUND_ROWS的用法
  5. 选项卡,下拉菜单操做时的页面数据更新,highcharts,d3 结合。
  6. 小学有学计算机课程,如何进行小学计算机课程有效教学.doc
  7. 计算机网络---计算机网络分层结构
  8. asp.net core跨域访问ajax的验证访问
  9. 企业ERP系统如何选择?
  10. android微信认证失败怎么办,微信登陆好友头像验证失败该怎么办?
  11. EasyDemo*CSS尺寸与框模型(六七)
  12. 业界红包玩法与技术方案总结
  13. 简明python学习笔记—基本概念
  14. jdk小工具jps介绍 - Sky's blog - BlogJava
  15. 12306抢票:极限并发带来的思考
  16. 高斯混合模型和期望最大化的完整解释
  17. wordPress mac本地安装
  18. 周星驰电影作品一览表
  19. 运动控制卡应用开发教程之激光振镜控制
  20. java运算优先级顺口溜_java运算符优先级记忆口诀

热门文章

  1. [转载]windows内存优化 没你想像那么美
  2. ActiveMQ传输文件的几种方式原理与优劣
  3. Docker学习之路 用commit命令创建镜像
  4. CVPR 2014 ObjectnessBING 原文翻译
  5. Reproducible Research in Computational Science
  6. 雅虎开源CaffeOnSpark:基于Hadoop/Spark的分布式深度学习
  7. IDEA快捷键拆解系列(五):Navigate篇
  8. Android中mesure过程详解
  9. 推荐升级版PDF在线转Word转换器
  10. 让几个div靠外面容器底部对齐