zoukankan      html  css  js  c++  java
  • POJ 2010(二分

    开始写这个题的之后怎么写都些不对,而且因为考虑到分数相等的情况所以写的比较复杂(也可能是别的原因)一直WA,后来参考了大神的博客,其实对于这种二分的题目,如果有相等的情况,排个序人为加一个标准让所有元素可比就可以直接二分了嘛

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<utility>
    #include<vector>
    #define INF 0x3fffffff
    using namespace std;
    typedef long long ll;
    int N,C,F;
    const int maxv=1e5+30;
    
    struct cow{
        int od,a,s;
    }A[maxv];
    bool cmp_s(cow a,cow b){
        return a.s<b.s;
    }
    bool cmp_a(cow a,cow b){
        return a.a<b.a;
    }
    int getans[maxv],getaid[maxv];
    int main(){
        freopen("in.txt","r",stdin);
        cin>>N>>C>>F;
        for(int i=0;i<C;i++) scanf("%d%d",&A[i].s,&A[i].a);
        sort(A,A+C,cmp_s);
        for(int i=0;i<C;i++) A[i].od=i,getans[i]=A[i].s,getaid[i]=A[i].a;
        sort(A,A+C,cmp_a);
        ll ans=-1;
        ll l=-1,r=C;
        ll half=N>>1;
        while(r-l>1){
            ll mid=(r+l)>>1;
            ll tol=getaid[mid];
            ll low=0,upp=0,mida=0;
            for(int i=0;i<C;i++){
                if(A[i].od<mid&&tol+A[i].a<=F&&low<half){
                    low++;
                    tol+=A[i].a;
                }
                else if(A[i].od>mid&&tol+A[i].a<=F&&upp<half){
                    upp++;
                    tol+=A[i].a;
                }
            }
            if(low<half&&upp<half)
                break;
            else if(low>=half&&upp>=half){
                ans=getans[mid];
                l=mid;
            }
            else if(low<half){
                l=mid;
            }
            else
                r=mid;
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    HTML5 History 模式 nginx配置
    nginx配置及性能调优
    windows启动jar包bat文件
    在线小工具
    BAT文件里Maven命令执行后退出的解决方案
    文字超出隐藏
    SOCKET.IO
    call与apply简单介绍
    html里面,没有内容,要高度占满页面
    css实现三角形标
  • 原文地址:https://www.cnblogs.com/Cw-trip/p/4470907.html
Copyright © 2011-2022 走看看