poj2010 Moo University - Financial Aid 二分

原创 2017年01月03日 23:57:39

题意: bessie要给牛建一所学校,他的总资金为F,牛的总数为C,总共可以提供N头牛上学,对于每头牛,已知它的分数和bessie需要提供给它的资金,问如何从C头牛中选择N头牛,在资金不超过F的前提下,使这N头牛的分数的中位数最大

思路:由于结果收到分数和资金的共同影响,所以将牛的分数和个人资金以及下标存在结构体中,分别对分数和资金排序,再二分分数的中位数,不断更新即可

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,s;
struct Z{
int x;
int y;
int z;
}z1[100005],z2[100005];
bool cmp(Z& a,Z& b){
return a.x<b.x;
}
bool cmp1(Z& a,Z& b){
return a.y<b.y;
}
int main(){
cin>>m>>n>>s;
int ans=-1;
for(int i=0;i<n;i++){
    scanf("%d%d",&z1[i].x,&z1[i].y);
}
sort(z1,z1+n,cmp);
for(int i=0;i<n;i++){
    z1[i].z=z2[i].z=i;
    z2[i].x=z1[i].x;
    z2[i].y=z1[i].y;
}
memcpy(z2, z1, sizeof(Z) * n);
sort(z2,z2+n,cmp1);
int l=0,r=n;
while(r-l>1){
    int mid=(l+r)/2;
     int sum=z1[mid].y;
     int left=0,right=0;
     for(int i=0;i<n;++i){
        if((z2[i].z<mid)&&(sum+z2[i].y<=s)&&(left<m/2)){
            left++;
            sum+=z2[i].y;
        }
        else if((z2[i].z>mid)&&(z2[i].y+sum<=s)&&(right<m/2)){
            sum+=z2[i].y;
            right++;
        }
     }
        if((left<m/2)&&(right<m/2)){
            ans=-1;
            break;
        }
        else if(left<m/2)
               l=mid;
        else if(right<m/2)
              r=mid;
        else {
            ans=z1[mid].x;
            l=mid;
        }
}
 cout<<ans<<endl;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

POJ 2010 Moo University - Financial Aid (优先队列/二分答案)

题目大意:从c个物品中选出n(奇数)个物品,使得这n个物品的价值中位数尽量高,且总价格不超过f。做法1: 把物品按价值排序 half表示n/2向下取整 low[i]表示前i - 1个物品中价格最小的h...

POJ2010 Moo University - Financial Aid 优先队列

题目大意是youyibi

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

poj 2010 Moo University - Financial Aid

#include #define MAX_N 100000+16 typedef struct { int s,f; int rank; }Cow; int N,C,F,half; Cow cow...

POJ 2010 Moo University - Financial Aid 堆的高级应用 -- 维护最小(最大和)

题目大意:有N头牛,每头牛两个权值,A和B。从这N头牛中选取C头牛,使得: 1、这些牛中A权值的中位数尽量大。 2、这些牛的B权值的和小于题中所给的F 输出这个最大的A权值的中位数;如果没有满足...

poj 2010 Moo University - Financial Aid 大顶堆维护最小和

题意: 有c有牛,从中选(n-1)/2头,使他们的得分中位数最大且需要的资金援助和不超过f. 分析: 堆的运用大顶堆维护最小和。 代码: //poj 2010 //sep9 #include...

***POJ 2010 Moo University - Financial Aid

原题链接提意: N个名额,C头牛申请入学,F是学校最多能提供的补助金总额。 每头牛有一个分数和需要的补助金。 要求N头入学的牛的分数的中间最大,并输出这个分数。如果不能让N头牛入学,则输出-1。...

POJ 2010- Moo University - Financial Aid

引用来自http://www.cnblogs.com/iiyiyi/p/4738644.html的思路 【题目大意】 给出C头奶牛的SAT成绩和申请奖学金,选出N头牛,使得总奖学金在≤F的情况下奶牛...

POJ 2010 Moo University - Financial Aid (优先队列)

Moo University - Financial Aid Time Limit: 1000MS   Memory Limit: 30000K Total Submi...
  • lwt36
  • lwt36
  • 2015-03-17 13:30
  • 240

poj 2010 Moo University - Financial Aid 优先队列

《挑战》练习题,优先队列。

POJ-2010-Moo University - Financial Aid

这个题是说要救助n个人
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)