原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf

题目翻译:

问题描述

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

输入格式

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

输出格式

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

样例输入

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

样例输出

1

样例输入

2 2
3 1 3 3 3 3 3 3

样例输出

2

数据规模和约定

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

题目大意:题目翻译已经足够简略了,不需要再简化了。。

思路分析:2013年World Finals难得的水题啊!首先每台机器分配2k个电池,那它的能量之差最小值一定是最小的两个电池的差。同样的,我们可以对所有电池的能量进行排序,每一台机器的能量之差一定是排序后相邻两节电池的能量之差。看到“最大值最小”的想法一定是二分答案p,如果对于所有\(0\le i \le n\)在排序后的序列中的前\(2Ki\)个电池中,都存在i对电池的能量之差小于等于p,则这个p是合要求的

算法流程:

二分答案p然后贪心判定即可

参考代码:

  1. //date 20140122
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. const int maxnk = ;
  9.  
  10. inline int getint()
  11. {
  12. int ans(); char w = getchar();
  13. while('' > w || w > '')w = getchar();
  14. while('' <= w && w <= '')
  15. {
  16. ans = ans * + w - '';
  17. w = getchar();
  18. }
  19. return ans;
  20. }
  21.  
  22. inline int max(int a, int b){return a > b ? a : b;}
  23. inline int min(int a, int b){return a < b ? a : b;}
  24.  
  25. int n, k, nk;
  26. int chips[maxnk];
  27.  
  28. inline bool check(int w)
  29. {
  30. for(int p = , q = ; q < n; ++p)
  31. {
  32. if(p - > q * * k)return false;
  33. if(chips[p + ] - chips[p] <= w)++p, ++q;
  34. }
  35. return true;
  36. }
  37.  
  38. inline int solve(int l, int r)
  39. {
  40. int mid;
  41. while(l < r)
  42. {
  43. mid = (l + r) >> ;
  44. if(check(mid))r = mid;
  45. else l = mid + ;;
  46. }
  47. return l;
  48. }
  49.  
  50. int main()
  51. {
  52. freopen("low.in", "r", stdin);
  53. freopen("low.out", "w", stdout);
  54.  
  55. while(scanf("%d%d", &n, &k) != EOF)
  56. {
  57. nk = * n * k; int Max = ;
  58. for(int i = ; i <= nk; ++i){chips[i] = getint(); Max = max(Max, chips[i]);}
  59. sort(chips + , chips + nk + );
  60. int ans = solve(, Max);
  61. printf("%d\n", ans);
  62. }
  63.  
  64. return ;
  65. }

没什么需要注意的地方。。

ACM - ICPC World Finals 2013 F Low Power的更多相关文章

  1. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

  2. ACM - ICPC World Finals 2013 A Self-Assembly

    原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...

  3. ACM - ICPC World Finals 2013 H Матрёшка

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 俄罗斯套娃是一些从外到里大小递减的传 ...

  4. ACM - ICPC World Finals 2013 D Factors

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 一个最基本的算数法则就是大于1的整数 ...

  5. ACM - ICPC World Finals 2013 I Pirate Chest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 海盗Dick受够了在公海上厮杀.抢劫 ...

  6. ACM - ICPC World Finals 2013 B Hey, Better Bettor

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这题真心的麻烦……程序不长但是推导过程比较复杂,不太好想 ...

  7. 2013 ACM/ICPC 长春网络赛F题

    题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...

  8. 2013 ACM/ICPC 南京网络赛F题

    题意:给出一个4×4的点阵,连接相邻点可以构成一个九宫格,每个小格边长为1.从没有边的点阵开始,两人轮流向点阵中加边,如果加入的边构成了新的边长为1的小正方形,则加边的人得分.构成几个得几分,最终完成 ...

  9. 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】

    F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...

随机推荐

  1. OpenSSL心脏出血漏洞全回顾

    近日网络安全界谈论的影响安全最大的问题就是Heartbleed漏洞,该漏洞是4月7号国外黑客曝光的.据Vox网站介绍,来自Codenomicon和谷歌安全部门的研究人员,发现OpenSSL的源代码中存 ...

  2. 已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列

    1.我的思路先将b链表连接在a链表的后面,这个很容易实现,将a链表最后的结点中的p.next改为指向b链表的头结点即可. 再将这个新链表用选择排序即可. 代码如下: #include<stdio ...

  3. UICollectionViewLayout

    http://blog.csdn.net/majiakun1/article/details/17204921

  4. ssh 远程 centos 乱码

    今天,帮我们同学处理一下中文显示乱码的问题.这个是个国内Linux用户烦恼的问题,由于大部分的Linux发行版都是以英语为主体的,而且英文在通用性和稳定性上都比中文要好一些,各种奇怪的BUG也要少一点 ...

  5. NWR协议

    NWR是一种在分布式存储系统中用于控制一致性级别的一种策略.在Amazon的Dynamo云存储系统中,就应用NWR来控制一致性. 让我们先来看看这三个字母的含义:N:在分布式存储系统中,有多少份备份数 ...

  6. linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)

    一.多会话工具screen.tmux 两个都是多窗口工具.1.使用后wim出现配色问题:http://ibartman.com/2014/04/16/vim%20%E9%85%8D%E8%89%B2/ ...

  7. iOS项目的完整重命名方法图文教程

    原文链接:http://www.cocoachina.com/ios/20150104/10824.html iOS项目的完整重命名方法图文教程 前言:在iOS开发中,有时候想改一下项目的名字,都会遇 ...

  8. ZOJ题目分类

    ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...

  9. Javascript 正则表达式_3

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. magento后台无法登陆的问题

    解决方法: 打开 magento/app/code/core/Mage/Core/Model/Session/Abstract/varien.php 将// set session cookie pa ...