题意的话,就看其他人的吧


概括:二分中位数

大体上便是二分一个中位数,带入检验,若分数比他小的有\(\lfloor n/2 \rfloor\)个,分数比他的大的也有这么多,而且贪心的买,花费小于预算。

便带入到数作为中位数是可以的。记录并进行下一次二分

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using std::sort;
const int maxn=101000;
struct node
{
int id;
long long score;
long long cost;
node ( ) { id=score=cost=0; }
};
node base[maxn],pas[maxn];
int rank[maxn];
long long n,c,f;
int compare1(const node &a,const node &b)
{
if(a.score!=b.score) return a.score<b.score;
return a.cost<b.cost;
}
int compare2(const node &a,const node &b)
{
return a.cost<b.cost;
}
int mk_it(int v)
{
long long T1=0,T2=0,Tot=base[v].cost;//T1为前半部分选取的个数,T2为后半部分选取的个数,Tot为总花费
for(int i=1;i<=c&&Tot<=f&&T1+T2+1<n;i++)
{
int Id=pas[i].id,F=0;//F是用来防止同一个分数,在下面被选了两次
if(Id==base[v].id) continue;
if((rank[Id]<rank[base[v].id]||pas[i].score==base[v].score)&&T1<(n>>1))
{
++T1;F=1;
Tot+=pas[i].cost;
}
if((rank[Id]>rank[base[v].id]||pas[i].score==base[v].score)&&T2<(n>>1)&&!F)
{
++T2;
Tot+=pas[i].cost;
}
}
return T1+T2+1==n&&Tot<=f;//返回是否可行
}
int main()
{
scanf("%lld%lld%lld",&n,&c,&f);
for(int i=1;i<=c;i++)
{
scanf("%lld%lld",&base[i].score,&base[i].cost);
base[i].id=i;
}
sort(base+1,base+1+c,compare1);//按照分数排序
for(int i=1;i<=c;i++) rank[base[i].id]=i,pas[i]=base[i];//记录排名(检验时用到)
sort(pas+1,pas+1+c,compare2);//按照价钱排序
int l=1,r=c;
long long ans=-1;
while(l<=r)//二分
{
int mid=(l+r)>>1;
if(mk_it(mid))
ans=base[mid].score,l=mid+1;
else
r=mid-1;
}
printf("%lld",ans);
}

Poj2010 Moo University - Financial Aid的更多相关文章

  1. poj2010 Moo University - Financial Aid 优先队列

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

  2. POJ2010 Moo University - Financial Aid(二分法)

    题目地址 分析:如果用二分法,关键是score和aid分开排序,score排序是为了充分利用中位数的性质,这样就可以确定m左右必须各选N/2个,到这之后有人是用dp求最优解,可以再次按照aid排序一次 ...

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

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

  4. Divide and conquer:Moo University - Financial Aid(POJ 2010)

    Moo University - Financial Aid 其实是老题了http://www.cnblogs.com/Philip-Tell-Truth/p/4926008.html 这一次我们换二 ...

  5. Moo University - Financial Aid

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

  6. poj 2010 Moo University - Financial Aid

                                                                                                Moo Univ ...

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

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

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

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

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

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

随机推荐

  1. GuavaCache实现堆缓存

    一.缓存 频繁地数据库I/O是很大的负担,而缓存是减少I/O提高性能的银弹. 缓存的实现一般上是以类似map的键值对的形式,并对外提供put和get方法,但缓存空间不能无限扩大,所以它得有一种缓存清除 ...

  2. Visual Studio Code 的使用

    常用快捷键 常用General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Qu ...

  3. Open Live Writer 安装和博客账号配置

    打开Open Live Writer就像您的博客的Word一样.打开Live Writer是一个功能强大,轻量级的博客编辑器,允许您创建博客文章,添加照片和视频,然后发布到您的网站. Open Liv ...

  4. Java温故而知新(10)类的加载机制

    类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性 ...

  5. vue-i18n国际化实例

    demo 场景需求分析 需求很简单,左上角 ''网易云音乐''就是一个中英文切换的按钮,点击弹出提示框,确认切换语言后,实现英文版本. 切换成英文版本: 三.实现国际化 1.我们得先有开发环境,先有项 ...

  6. jQuery Text-to-Speech 谷歌在线语音

    <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8" ...

  7. null id in com.rocky.** entry 错误处理

    1. 概述 使用hibernate往mysql数据库插入记录出错如下 10:37:57,364 ERROR [AssertionFailure] an assertion failure occure ...

  8. 新项目放到jenkins步骤

      1配置playbook.xml,src和dest需要和运维确认 2项目内config 文件夹下index文件内,build对象内assetsPublicPath属性是否需要更改.   playbo ...

  9. 2d动画开发之PIXI开发

    简单的移动小游戏只要引入pixi.min.js就可以, 如果要用spine动画(龙骨也支持导出spine格式的)就要引入pixi-spine.js 如果还有声音的支持引入pixi-sound.js 学 ...

  10. 10分钟学会Less开发环境搭建与初体验

    Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 今天看一下,10分钟能不能手把手快速教会你Le ...