ACM - ICPC World Finals 2013 F Low Power
2014-01-27 16:08
375 查看
原题下载: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然后贪心判定即可
参考代码:
没什么需要注意的地方。。
题目翻译:
问题描述
有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 = 1000006; inline int getint() { int ans(0); char w = getchar(); while('0' > w || w > '9')w = getchar(); while('0' <= w && w <= '9') { ans = ans * 10 + w - '0'; 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 = 1, q = 0; q < n; ++p) { if(p - 1 > q * 2 * k)return false; if(chips[p + 1] - chips[p] <= w)++p, ++q; } return true; } inline int solve(int l, int r) { int mid; while(l < r) { mid = (l + r) >> 1; if(check(mid))r = mid; else l = mid + 1;; } return l; } int main() { freopen("low.in", "r", stdin); freopen("low.out", "w", stdout); while(scanf("%d%d", &n, &k) != EOF) { nk = 2 * n * k; int Max = 0; for(int i = 1; i <= nk; ++i){chips[i] = getint(); Max = max(Max, chips[i]);} sort(chips + 1, chips + nk + 1); int ans = solve(0, Max); printf("%d\n", ans); } return 0; }
没什么需要注意的地方。。
相关文章推荐
- ACM/ICPC World Finals 2013 F Low Power
- ACM - ICPC World Finals 2013 C Surely You Congest
- ACM/ICPC World Finals 2013 A Self-Assembly
- ACM/ICPC World Finals 2013 C Surely You Congest
- ACM - ICPC World Finals 2013 D Factors
- ACM - ICPC World Finals 2013 H Матрёшка
- ACM - ICPC World Finals 2013 I Pirate Chest
- ACM - ICPC World Finals 2013 A Self-Assembly
- 例题6-19 自组合(Self-Assembly, ACM/ICPC World Finals 2013, UVa 1572)
- ACM - ICPC World Finals 2013 B Hey, Better Bettor
- 【DP 训练】Stamps and Envelope Size, ACM/ICPC World Finals 1995, UVa242
- ACM-ICPC World Finals 2017 - Need for Speed
- 浙江大学获ACM-ICPC World Finals …
- 习题7-2 黄金图形(Golygons, ACM/ICPC World Finals 1993, UVa225)
- 循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)
- Sqaures, ACM/ICPC World Finals 1990, UVa
- 例题9-1 城市里的间谍(A Spy in the Metro, ACM/ICPC World Finals 2003, UVa1025)
- UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
- 关于”图书管理系统(Borrowers,ACM/ICPC World Finals 1994, UVa230)"的讨论
- Puzzle,ACM/ICPC World Finals 1993, UVa227