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

  

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <functional>
  4.  
  5. using namespace std;
  6.  
  7. struct _set
  8. {
  9. int score, aid, rank_score;
  10. }Cows_Score[], Cows_Aid[];
  11. bool rank_score(_set &a, _set &b)
  12. {
  13. return a.score < b.score;
  14. }
  15. bool aid_score(_set &a, _set &b)
  16. {
  17. return a.aid < b.aid;
  18. }
  19.  
  20. void solve(const int, const int, const int);
  21.  
  22. int main(void)
  23. {
  24. int N, Cows_Sums, F;
  25.  
  26. while (~scanf("%d%d%d", &N, &Cows_Sums, &F))
  27. {
  28. for (int i = ; i < Cows_Sums; i++)
  29. scanf("%d%d", &Cows_Score[i].score, &Cows_Score[i].aid);
  30. sort(Cows_Score, Cows_Score + Cows_Sums, rank_score);
  31. for (int i = ; i < Cows_Sums; i++)
  32. Cows_Score[i].rank_score = i;//给score的号排序,等一下二分的时候要用到
  33. memcpy(Cows_Aid, Cows_Score, sizeof(_set)*Cows_Sums);
  34. sort(Cows_Aid, Cows_Aid + Cows_Sums, aid_score);
  35.  
  36. solve(N, Cows_Sums, F);
  37. }
  38. return ;
  39. }
  40.  
  41. void solve(const int N, const int Cows_Sums, const int F)
  42. {
  43. int lb = , rb = Cows_Sums, mid,left, right, tmp_sum;
  44. bool m, n;
  45. while (rb - lb > )//注意这里是对下标进行二分,对于aid直接找就可以了,注意一些细节上的问题就好
  46. {
  47. mid = (lb + rb) / ;
  48. tmp_sum = Cows_Score[mid].aid;
  49. left = ; right = ;
  50. for (int i = ; i < Cows_Sums; i++)
  51. {
  52. if ((Cows_Aid[i].rank_score < mid) && (tmp_sum + Cows_Aid[i].aid <= F) && left < N / )
  53. {
  54. tmp_sum += Cows_Aid[i].aid;
  55. left++;
  56. }
  57. else if ((Cows_Aid[i].rank_score > mid) && (tmp_sum + Cows_Aid[i].aid <= F) && right < N / )
  58. {
  59. tmp_sum += Cows_Aid[i].aid;
  60. right++;
  61. }
  62. }
  63. m = left < N / ? : ;
  64. n = right < N / ? : ;
  65. if (!m&&!n)
  66. {
  67. printf("-1\n");
  68. return;
  69. }
  70. else if (m == || (m == && n == ))
  71. lb = mid;
  72. else if (n == )
  73. rb = mid;
  74.  
  75. }
  76. printf("%d\n", Cows_Score[lb].score);
  77. }

  

  不过其实速度没差多少,因为都是O(nlogn)的算法

Divide and conquer:Moo University - Financial Aid(POJ 2010)的更多相关文章

  1. Moo University - Financial Aid POJ 2010 优先队列(最大堆)

    题目:http://poj.org/problem?id=2010 题目大意: 奶牛上大学.因为经济问题,每头奶牛都需要一定的补助需求,学校会提供一定的资金用于补助 每头牛都有自己的分数,学校招收的名 ...

  2. Heap:Moo University - Financial Aid(POJ 2010)

       牛的学校 题目大意:这只Bessie真是太顽皮了,她又搞了个学校,准备招生,准备通过一个考试筛选考生,但是不能招到每个学生,每个学生也不能一定能上学,要资助,问你在一定资金内,怎么收学生,使收到 ...

  3. POJ 2010 Moo University - Financial Aid( 优先队列+二分查找)

    POJ 2010 Moo University - Financial Aid 题目大意,从C头申请读书的牛中选出N头,这N头牛的需要的额外学费之和不能超过F,并且要使得这N头牛的中位数最大.若不存在 ...

  4. poj 2010 Moo University - Financial Aid

                                                                                                Moo Univ ...

  5. 【POJ - 2010】Moo University - Financial Aid(优先队列)

    Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...

  6. poj 2010 Moo University - Financial Aid 最大化中位数 二分搜索 以后需要慢慢体会

    Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6599   A ...

  7. Moo University - Financial Aid

    Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...

  8. poj 2010 Moo University - Financial Aid(优先队列(最小堆)+ 贪心 + 枚举)

    Description Bessie noted that although humans have many universities they can attend, cows have none ...

  9. POJ 2010 - Moo University - Financial Aid 初探数据结构 二叉堆

    考虑到数据结构短板严重,从计算几何换换口味= = 二叉堆 简介 堆总保持每个节点小于(大于)父亲节点.这样的堆被称作大根堆(小根堆). 顾名思义,大根堆的数根是堆内的最大元素. 堆的意义在于能快速O( ...

随机推荐

  1. Highcharts属性中英文参照

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  2. SQL Server 2012不支持从SQL Server 2000的备份进行还原

    错误: dbbackup failed: Unable to restore database 'ppt'Not valid backupThe database was backed up on a ...

  3. Django动态下载文件

    前台提交查询条件,下载符合条件的EXCEL数据文件,后端视图中使用 xlwt 库来返回,如: objs = Units.objects.all() # 创建 Workbook 时,如果需要写入中文,请 ...

  4. 黄学长模拟day1 球的序列

    N个编号为1-n的球,每个球都有唯一的编号.这些球被排成两种序列,分别为A.B序列,现在需要重新寻找一个球的序列l,对于这个子序列l中任意的两个球,要求j,k(j<k),都要求满足lj在A中位置 ...

  5. Linux 信号量大全

    编号 信号名称 缺省动作 说明 1 SIGHUP 终止 终止控制终端或进程 2 SIGINT 终止 键盘产生的中断(Ctrl-C) 3 SIGQUIT dump 键盘产生的退出 4 SIGILL du ...

  6. 教你如何删除tomcat服务器的stdout.log文件

    用Tomcat做WEB服务器的人都知道,有个很让人头痛的问题,就是stdout.log日志文件会自动增长,而且增长得很快. 先来看看我的痛处吧,公司有个WEB应用,就是用Tomcat作为服务器的,由于 ...

  7. Android开源项目(二)

    第二部分 工具库 主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过 ...

  8. Spring 事务知识

    1.1  Spring注解的各种行为 事物传播注解: @Transactional(propagation=Propagation.REQUIRED) (常用) 如果有事务, 那么加入事务, 没有的话 ...

  9. Windows8笔记

    一.WIN8 硬盘变为可弹出设备 如果电脑使用的是nforce芯片组的主板和串口硬盘.在系统中安装好所有的硬件驱动程序后,会出现这种情况.这是nforce芯片组在安装了IDE-SW主板驱动以后,系统会 ...

  10. POJ 3281 网络流dinic算法

    B - Dining Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit S ...