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( ...
随机推荐
- ssi技术
html页面 <!DOCTYPE html> <html> <head> <title>测试ssi</title> <meta nam ...
- jQuery源码-dom操作之jQuery.fn.html
写在前面 前面陆陆续续写了jQuery源码的一些分析,尽可能地想要cover里面的源码细节,结果导致进度有些缓慢.jQuery的源码本来就比较晦涩,里面还有很多为了解决兼容问题很引入的神代码,如果不g ...
- WCF binding的那些事!!!
原文地址:http://www.cnblogs.com/Anima0My/archive/2008/04/16/1156146.html WCF中常用的binding方式: BasicHttpBind ...
- HDU 2007
/*杭电ACM ID:2007*/ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int in1, in2 ...
- HDOJ 4389 X mod f(x)
数位DP........ X mod f(x) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- VC++6.0MFC运行的简单流程
背景: 由于下位机做的一些东西,总是需要通过上位机来验证,以及为了直观给客户展示下位机的功能,所以时常需要编写一些简单的APP.今天就以VC++6.0为例,简单的记录下该如何快速的创建一个APP. 正 ...
- PHP Socket实现websocket(三)Stream函数
除了socket函数也可以使用stream函数来实现服务器与客户端. 参考PHP 的Stream实现服务器客户端模型: http://php.net/manual/en/book.stream.php ...
- IoC模式
1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...
- iOS开发——UI基础-按钮内边距,图片拉伸
一.内边距 UIButton有三个属性,分别可以设置按钮以及内部子控件的内边距 1.contentEdgeInsets 如果是设置contentEdgeInsets, 会把UIImageView和UI ...
- HttpClient session
session概述 session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session ...