首页 > 分享 > Poj2010 Moo University

Poj2010 Moo University

最新推荐文章于 2024-11-06 13:07:34 发布

weixin_30597269 于 2019-01-05 21:16:00 发布

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

概括:二分中位数

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

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

#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;

for(int i=1;i<=c&&Tot<=f&&T1+T2+1<n;i++)

{

int Id=pas[i].id,F=0;

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);

}

转载于:https://www.cnblogs.com/Lance1ot/p/10226303.html

相关知识

Poj2010 Moo University
剑桥大学简介University of Cambridge
杜克大学(Duke University)
Princeton University
Brown University : Rankings, Fees & Courses Details
11.芝加哥大学(The University of Chicago)
宾夕法尼亚大学(Penn State University)
哥伦比亚大学 (Columbia University)
普林斯顿大学(Princeton University)深度游
芝加哥大学雅思要求University of Chicago解析

网址: Poj2010 Moo University https://m.huajiangbk.com/newsview1883598.html

所属分类:花卉
上一篇: 人民币第二套元角硬币的开发与研制
下一篇: 郑风生态牡丹园迎来首个客流高峰