ACM - ICPC World Finals 2013 F Low Power
原题下载: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然后贪心判定即可
参考代码:
//date 20140122
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxnk = ; inline int getint()
{
int ans(); char w = getchar();
while('' > w || w > '')w = getchar();
while('' <= w && w <= '')
{
ans = ans * + w - '';
w = getchar();
}
return ans;
} inline int max(int a, int b){return a > b ? a : b;}
inline int min(int a, int b){return a < b ? a : b;} int n, k, nk;
int chips[maxnk]; inline bool check(int w)
{
for(int p = , q = ; q < n; ++p)
{
if(p - > q * * k)return false;
if(chips[p + ] - chips[p] <= w)++p, ++q;
}
return true;
} inline int solve(int l, int r)
{
int mid;
while(l < r)
{
mid = (l + r) >> ;
if(check(mid))r = mid;
else l = mid + ;;
}
return l;
} int main()
{
freopen("low.in", "r", stdin);
freopen("low.out", "w", stdout); while(scanf("%d%d", &n, &k) != EOF)
{
nk = * n * k; int Max = ;
for(int i = ; i <= nk; ++i){chips[i] = getint(); Max = max(Max, chips[i]);}
sort(chips + , chips + nk + );
int ans = solve(, Max);
printf("%d\n", ans);
} return ;
}
没什么需要注意的地方。。
ACM - ICPC World Finals 2013 F Low Power的更多相关文章
- ACM - ICPC World Finals 2013 C Surely You Congest
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...
- ACM - ICPC World Finals 2013 A Self-Assembly
原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...
- ACM - ICPC World Finals 2013 H Матрёшка
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 俄罗斯套娃是一些从外到里大小递减的传 ...
- ACM - ICPC World Finals 2013 D Factors
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 一个最基本的算数法则就是大于1的整数 ...
- ACM - ICPC World Finals 2013 I Pirate Chest
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 海盗Dick受够了在公海上厮杀.抢劫 ...
- ACM - ICPC World Finals 2013 B Hey, Better Bettor
原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这题真心的麻烦……程序不长但是推导过程比较复杂,不太好想 ...
- 2013 ACM/ICPC 长春网络赛F题
题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...
- 2013 ACM/ICPC 南京网络赛F题
题意:给出一个4×4的点阵,连接相邻点可以构成一个九宫格,每个小格边长为1.从没有边的点阵开始,两人轮流向点阵中加边,如果加入的边构成了新的边长为1的小正方形,则加边的人得分.构成几个得几分,最终完成 ...
- 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】
F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...
随机推荐
- xp/2003开关3389指令
开启3389: @echo offtitle 开启3389clsrem 开启3389reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ ...
- HDOJ 1226 超级密码
超级密码 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- javascript实现数据结构与算法系列:功能完整的线性链表
由于链表在空间的合理利用上和插入,删除时不需要移动等的有点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表长度时不如顺序存储结构的缺点:另一方面,由于在链表中 ...
- sql脚本太大无法打开的解决办法
在sqlcmd中执行脚本文件的方法有2种: 方法1.在DOS中,可以调用sqlcmd命令,并用选项-i传入想要执行的文件名: sqlcmd -S "这里改成你的服务器名称" -U ...
- PHP命名空间(Namespace)
http://www.jb51.net/article/36389.htm 字符串形式的动态调用方式 //魔法常量__NAMESPACE__的值是当前空间名称 //可以组合成字符串并调用 $comme ...
- iOS正则匹配手机号
#pragma 正则匹配手机号 + (BOOL)validateMobile:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8 ...
- (7)nehe教程1 创建一个OpenGL窗口:
不要用那个nehe ndk了 误人子弟! 转自: 一个窗口,代码可真多啊 http://www.yakergong.net/nehe/ 在这个教程里,我将教你在Windows环境中创建OpenGL程序 ...
- Changing the Overridden Method’s Characteristics
修改重写方法的特征 在大多数情况下,我们重写(override)一个 virtual 方法是为了改变它的实现.然后,有时我们却想改变该 virtual 方法的其他的特征,这往往会带来一系列问题. 1) ...
- QTP 参数化
PS:方法内容是转的别人的,我们项目中只用到了方法三,主要用于将测试数据与业务分离,增强测试数据的可维护性. 方法一.DataTable方法 这是QTP提供的一种方法,也是最容易实现参数化的一种方式. ...
- Android核心分析之十七电话系统之rilD
Android电话系统之-rild Rild是Init进程启动的一个本地服务,这个本地服务并没有使用Binder之类的通讯手段,而是采用了socket通讯这种方式.RIL(Radio Interfac ...