BUAA1389愤怒的DZY(最大值最小化)
2016-02-02 16:27
260 查看
http://acm.buaa.edu.cn/problem/1389/
愤怒的DZY
【问题描述】
“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”。游戏是这样的:玩家有K个DZY,和N个位于不同的整数位置:X1,X2,…,XN的干草包。每一个DZY都可以站在某个位置:X 扔炸弹,扔完炸弹,这个DZY就会挂掉。扔炸弹的半径为R(且每次每个DZY扔炸弹的半径不变,都是R,而站的位置X可以改变),破坏范围为的X−R~X+R(即位置在X-R到X+R(含X-R,X+R)都会被炸掉)。现在给定DZY的个数K,和干草堆的位置:X1,X2,…,XN,问你最小的可以炸掉所有干草堆的半径R。
【输入说明】
第一行两个正整数N,K。接下来N行,每行一个数,依次是:X1,X2,…,XN。
【输出说明】
仅一行,代表最小的可以炸掉所有干草堆的半径R。
【样例输入】
7 2
20
25
18
8
10
3
1
【样例输出】
5
命题人:Hacker_WJC
学习了上题的最大值最小化,这题就很好解决了,数据n卡到10e6
对位置进行从小到大排序,枚举直径,不妨设最小直径为1,最大就是前后两点距离 a
- a[1],然后从a[1]开始枚举直径为mid是否可以,如果比a[i] + mid小就取下一个,否则cnt++,以该点为起点在判断
半径采用进一法输出,
View Code
愤怒的DZY
【问题描述】
“愤怒的小鸟”如今已经是家喻户晓的游戏了,机智的WJC最近发明了一个类似的新游戏:“愤怒的DZY”。游戏是这样的:玩家有K个DZY,和N个位于不同的整数位置:X1,X2,…,XN的干草包。每一个DZY都可以站在某个位置:X 扔炸弹,扔完炸弹,这个DZY就会挂掉。扔炸弹的半径为R(且每次每个DZY扔炸弹的半径不变,都是R,而站的位置X可以改变),破坏范围为的X−R~X+R(即位置在X-R到X+R(含X-R,X+R)都会被炸掉)。现在给定DZY的个数K,和干草堆的位置:X1,X2,…,XN,问你最小的可以炸掉所有干草堆的半径R。
【输入说明】
第一行两个正整数N,K。接下来N行,每行一个数,依次是:X1,X2,…,XN。
【输出说明】
仅一行,代表最小的可以炸掉所有干草堆的半径R。
【样例输入】
7 2
20
25
18
8
10
3
1
【样例输出】
5
命题人:Hacker_WJC
学习了上题的最大值最小化,这题就很好解决了,数据n卡到10e6
对位置进行从小到大排序,枚举直径,不妨设最小直径为1,最大就是前后两点距离 a
- a[1],然后从a[1]开始枚举直径为mid是否可以,如果比a[i] + mid小就取下一个,否则cnt++,以该点为起点在判断
半径采用进一法输出,
#include <cstdio> #include <algorithm> #include <cstring> #include <iostream> using namespace std; const int MAX = 1000000 + 10; int a[MAX]; int n,k,maxn,minn; void input() { minn = maxn = 0; scanf("%d%d", &n, &k); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); } sort(a + 1, a + n + 1); minn = 1; maxn = a - a[1]; } bool is_ok(int mid) { bool ok = true; int start = 1,End = 1; int cnt = 1; while(End <= n) { if(a[End] - a[start] <= mid) { End++; } else { cnt++; if(cnt > k) { ok = false; break; } start = End; } } return ok; } int solve() { int x = minn, y = maxn; while(x <= y) { int mid = (x + y) / 2; if(is_ok(mid)) y = mid - 1; else x = mid + 1; } return x; } int main() { input(); int ans = solve(); if(ans % 2 == 0) printf("%d\n", ans / 2 ); else printf("%d\n", ans / 2 + 1); }
View Code
相关文章推荐
- Maven dependency spring-web vs spring-webmvc
- 下载PhpStorm并进行激活
- Android实现传感器应用及位置服务
- 浏览器与输入法——用户入口的争夺
- 2.12 执行计划并取得数据行
- vijos1514天才的记忆
- linux里的backlog详解
- 2.11 确定执行计划
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- hdu4324 Triangle LOVE(拓扑排序)
- C语言盲点笔记1
- Git的origin和master分析
- 布隆过滤器
- Linux 下安装Mysql5.7
- 2.8 子查询解嵌套
- PL/SQL编程学习之开篇
- 2.7 视图合并
- PHP命名空间
- 编写基于dbscan的GPS数据热点区域分析(一)
- Linux目录结构及文件操作