zoukankan      html  css  js  c++  java
  • 【二分贪心】Bzoj3969 [WF2013] Low Power

    Description

    有n个机器,每个机器有2个芯片,每个芯片可以放k个电池。
    每个芯片能量是k个电池的能量的最小值。
    两个芯片的能量之差越小,这个机器就工作的越好。
    现在有2nk个电池,已知它们的能量,我们要把它们放在n个机器上的芯片上,
    使得所有机器的能量之差的最大值最小。

    Input

    第一行,两个正整数,n和k。
    第二行,2nk个整数,表示每个电池的能量。

    Output

    一行一个整数,表示所有机器的能量之差的最大值最小是多少。

    Sample Input

    2 3
    1 2 3 4 5 6 7 8 9 10 11 12

    Sample Output

    1

    HINT

    2nk <= 10^6, 1 <= pi <= 10^9。

    根据经验肯定先要排序

    最大值最小熟悉的设问那么考虑要二分

    肯定要尽量往前选

    于是检验

    //检验部分借鉴了别人的代码真是精简

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=1e6+5;
    
    int n,k,a[maxn];
    
    
    int check(int x){
        for(int p=1,q=0;q<n&&p<=2*n*k;p++){
            if(p-1>q*2*k) return 0;
            if(a[p+1]-a[p]<=x) q++,p++;
        }
        return 1;
    }
    
    int main(){
        scanf("%d%d",&n,&k);
        for(int i=1;i<=2*n*k;i++)
            scanf("%d",&a[i]);
        sort(a+1,a+2*n*k+1);
        
        int l=0,r=a[2*n*k]-a[1];
        while(l<r){
            int mid=(l+r)>>1;
            if(check(mid)) 
                r=mid;
            else
                l=mid+1;
        }
        
        printf("%d",l);
        return 0;
    }
  • 相关阅读:
    Broadcom 43228 Kali Linux Ubuntu
    linux 栈空间查看和修改
    mininet 操作命令
    linux shell note
    进程与线程的区别
    JAVA基础--JAVA 集合框架(泛型、file类)
    HashMap的实现原理
    Java 流(Stream)、文件(File)和IO
    总结接口和抽象类的异同
    Java 泛型
  • 原文地址:https://www.cnblogs.com/xkui/p/4526904.html
Copyright © 2011-2022 走看看