poj2010

</pre><pre name="code" class="html"><img src="https://img-blog.csdn.net/20151117215338104?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><pre name="code" class="html">#include"iostream"
#include"cstdio"
#include"queue"
#include"algorithm"
using namespace std;
struct Cow{int s,f;}cow[101000];
bool cmp(const Cow &a,const Cow &b)
{
    if(a.s!=b.s)
       return a.s>b.s;
    else
        return a.f<b.f;
}
int main()
{
    priority_queue<int>Q;
    int n,c,f,i,nu,dpl[101000],dpr[101000];
    while(scanf("%d%d%d",&n,&c,&f)!=EOF)
    {
        for(i=1;i<=c;i++)
            cin>>cow[i].s>>cow[i].f;
        sort(cow+1,cow+1+c,cmp);
        nu=n/2;
        int sum=0;
        while(!Q.empty())
           Q.pop();
        for(i=1;i<=nu;i++)
           Q.push(cow[i].f),sum+=cow[i].f;
        dpl[nu]=sum;
        for(i=nu+1;i<=c;i++)
        {
           if(cow[i].f>=Q.top())
              dpl[i]=sum;
           else
           {
              sum=sum-Q.top()+cow[i].f;
              Q.pop();
              Q.push(cow[i].f);
              dpl[i]=sum;
           }
        }
        sum=0;
        while(!Q.empty())
           Q.pop();
        for(i=c;i>=c-nu+1;i--)
            Q.push(cow[i].f),sum+=cow[i].f;
        dpr[c-nu+1]=sum;
        for(i=c-nu;i>=1;i--)
        {
            if(cow[i].f>=Q.top())
               dpr[i]=sum;
            else
           {
               sum=sum-Q.top()+cow[i].f;
               Q.pop();
               Q.push(cow[i].f);
               dpr[i]=sum;
           }
        }
        bool flag=false;
        for(i=nu+1;i<=c-nu;i++)
        {
            if(cow[i].f+dpl[i-1]+dpr[i+1]<=f)
            {
               cout<<cow[i].s<<endl;
               flag=true;
               break;
            }
        }
        if(!flag)
           cout<<"-1"<<endl;
    }

}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值