Divide and conquer:Moo University - Financial Aid(POJ 2010)
Moo University - Financial Aid
其实是老题了http://www.cnblogs.com/Philip-Tell-Truth/p/4926008.html
这一次我们换二分法来做这一道题,其实二分法比我以前那个方法好想一点,主要是这次我们可以根据下标进行二分,然后排两次序,第一次是根据分数来排序,然后记录分数的序,接下来就把aid排一次序,然后我们就可以进行二分了
参考http://www.hankcs.com/program/cpp/poj-2010-moo-university-financial-aid-binary-search.html
- #include <iostream>
- #include <algorithm>
- #include <functional>
- using namespace std;
- struct _set
- {
- int score, aid, rank_score;
- }Cows_Score[], Cows_Aid[];
- bool rank_score(_set &a, _set &b)
- {
- return a.score < b.score;
- }
- bool aid_score(_set &a, _set &b)
- {
- return a.aid < b.aid;
- }
- void solve(const int, const int, const int);
- int main(void)
- {
- int N, Cows_Sums, F;
- while (~scanf("%d%d%d", &N, &Cows_Sums, &F))
- {
- for (int i = ; i < Cows_Sums; i++)
- scanf("%d%d", &Cows_Score[i].score, &Cows_Score[i].aid);
- sort(Cows_Score, Cows_Score + Cows_Sums, rank_score);
- for (int i = ; i < Cows_Sums; i++)
- Cows_Score[i].rank_score = i;//给score的号排序,等一下二分的时候要用到
- memcpy(Cows_Aid, Cows_Score, sizeof(_set)*Cows_Sums);
- sort(Cows_Aid, Cows_Aid + Cows_Sums, aid_score);
- solve(N, Cows_Sums, F);
- }
- return ;
- }
- void solve(const int N, const int Cows_Sums, const int F)
- {
- int lb = , rb = Cows_Sums, mid,left, right, tmp_sum;
- bool m, n;
- while (rb - lb > )//注意这里是对下标进行二分,对于aid直接找就可以了,注意一些细节上的问题就好
- {
- mid = (lb + rb) / ;
- tmp_sum = Cows_Score[mid].aid;
- left = ; right = ;
- for (int i = ; i < Cows_Sums; i++)
- {
- if ((Cows_Aid[i].rank_score < mid) && (tmp_sum + Cows_Aid[i].aid <= F) && left < N / )
- {
- tmp_sum += Cows_Aid[i].aid;
- left++;
- }
- else if ((Cows_Aid[i].rank_score > mid) && (tmp_sum + Cows_Aid[i].aid <= F) && right < N / )
- {
- tmp_sum += Cows_Aid[i].aid;
- right++;
- }
- }
- m = left < N / ? : ;
- n = right < N / ? : ;
- if (!m&&!n)
- {
- printf("-1\n");
- return;
- }
- else if (m == || (m == && n == ))
- lb = mid;
- else if (n == )
- rb = mid;
- }
- printf("%d\n", Cows_Score[lb].score);
- }
不过其实速度没差多少,因为都是O(nlogn)的算法
Divide and conquer:Moo University - Financial Aid(POJ 2010)的更多相关文章
- Moo University - Financial Aid POJ 2010 优先队列(最大堆)
题目:http://poj.org/problem?id=2010 题目大意: 奶牛上大学.因为经济问题,每头奶牛都需要一定的补助需求,学校会提供一定的资金用于补助 每头牛都有自己的分数,学校招收的名 ...
- Heap:Moo University - Financial Aid(POJ 2010)
牛的学校 题目大意:这只Bessie真是太顽皮了,她又搞了个学校,准备招生,准备通过一个考试筛选考生,但是不能招到每个学生,每个学生也不能一定能上学,要资助,问你在一定资金内,怎么收学生,使收到 ...
- POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)
POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...
- poj 2010 Moo University - Financial Aid
Moo Univ ...
- 【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 ...
- Moo University - Financial Aid
Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...
- 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( ...
随机推荐
- Highcharts属性中英文参照
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- SQL Server 2012不支持从SQL Server 2000的备份进行还原
错误: dbbackup failed: Unable to restore database 'ppt'Not valid backupThe database was backed up on a ...
- Django动态下载文件
前台提交查询条件,下载符合条件的EXCEL数据文件,后端视图中使用 xlwt 库来返回,如: objs = Units.objects.all() # 创建 Workbook 时,如果需要写入中文,请 ...
- 黄学长模拟day1 球的序列
N个编号为1-n的球,每个球都有唯一的编号.这些球被排成两种序列,分别为A.B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置 ...
- Linux 信号量大全
编号 信号名称 缺省动作 说明 1 SIGHUP 终止 终止控制终端或进程 2 SIGINT 终止 键盘产生的中断(Ctrl-C) 3 SIGQUIT dump 键盘产生的退出 4 SIGILL du ...
- 教你如何删除tomcat服务器的stdout.log文件
用Tomcat做WEB服务器的人都知道,有个很让人头痛的问题,就是stdout.log日志文件会自动增长,而且增长得很快. 先来看看我的痛处吧,公司有个WEB应用,就是用Tomcat作为服务器的,由于 ...
- Android开源项目(二)
第二部分 工具库 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过 ...
- Spring 事务知识
1.1 Spring注解的各种行为 事物传播注解: @Transactional(propagation=Propagation.REQUIRED) (常用) 如果有事务, 那么加入事务, 没有的话 ...
- Windows8笔记
一.WIN8 硬盘变为可弹出设备 如果电脑使用的是nforce芯片组的主板和串口硬盘.在系统中安装好所有的硬件驱动程序后,会出现这种情况.这是nforce芯片组在安装了IDE-SW主板驱动以后,系统会 ...
- POJ 3281 网络流dinic算法
B - Dining Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit S ...