#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Cow
{
int score,money;
}cow[100005];
int n,c,f;
bool qrt(Cow f0,Cow s)
{
return f0.score<s.score;
}
bool qrt1(Cow f0,Cow s)
{
return f0.money<s.money;
}
bool ok(int mid)
{
Cow up[c],lo[c];
__int64 res=0;
int k=0;
for(int i=mid;i<c;i++)
up[k++]=cow[i];
k=0;
for(int i=0;i<mid;i++)
lo[k++]=cow[i];
sort(lo,lo+mid,qrt1);
sort(up,up+c-mid,qrt1);
for(int i=0;i<n/2;i++)
{
res+=(up[i].money+lo[i].money);
}
res+=up[n/2].money;
return res<=f;
}
int main()
{
while(scanf("%d%d%d",&n,&c,&f)!=EOF)
{
for(int i=0;i<c;i++)
scanf("%d%d",&cow[i].score,&cow[i].money);
sort(cow,cow+c,qrt);
int ub=c-n/2,lb=-1+n/2;
while(ub-lb>1)
{
int mid=(ub+lb)>>1;
if(ok(mid))
lb=mid;
else
ub=mid;
}
if(ok(lb))
printf("%d\n",cow[lb].score);
else
printf("-1\n");
}
return 0;
}
此题为二分。
注意n与c