UVa 10382
来源:互联网 发布:linux拷贝隐藏文件 编辑:程序博客网 时间:2024/05/16 15:55
题目:有一块矩形草坪,在中线上有n个喷淋头,可以浇灌圆形的区域,选择最少的喷淋头覆盖整个矩形区域。
分析:贪心、会议时间安排。将每个喷淋头转化成对应的区间(计算左右交点),按左交点排序贪心即可。
过程同会议时间安排,这里取区间相交(时间安排取不想交);
按左交点排序,每次找到能够覆盖上次结束位置(右交点)的最远点(右交点最大的)即可。
说明:判定不能覆盖的圆的时候用了平方,导致溢出,查了好久才发现~~~~(>_<)~~~~。
#include <stdio.h>#include <stdlib.h>#include <math.h>typedef struct _segment {double l, r;}segment;segment S[10005];int cmp(const void *a, const void *b){segment *p = (segment *)a;segment *q = (segment *)b;if (p-> l < q->l) {return -1;}else {return 1;}}int main(){int n, w, l, s, r;while (~scanf("%d%d%d",&n,&l,&w)) {int size = 0;for (int i = 0; i < n; ++ i) {scanf("%d%d",&s,&r);if (2*r > w) { // 用平方溢出了 - - S[size].l = s - sqrt(1.0*r*r - 0.25*w*w);S[size].r = s + sqrt(1.0*r*r - 0.25*w*w);size ++;}}qsort(S, size, sizeof(segment), cmp);int index = 0, now = 0, count = 0;double l_bound = 0, r_bound = 0;while (l_bound < l && now < size) {index = now;while (S[index].l <= l_bound && index < size) {if (r_bound < S[index].r) {r_bound = S[index].r;}index ++;}if (index == now) {break;}else {count ++;now = index;l_bound = r_bound;}}if (S[0].l > 0 || l_bound < l) {printf("-1\n");}else {printf("%d\n",count);}} return 0;}
阅读全文
0 0
- UVA 10382
- UVa 10382
- UVA 10382
- UVA 10382
- uva 10382
- UVa 10382
- uva 10382
- UVa 10382
- UVa 10382 Watering Grass
- UVa 10382 - Watering Grass
- UVa 10382 - Watering Grass
- uva 10382 - Watering Grass
- uva 10382 - Watering Grass
- Uva 10382 - Watering Grass
- Uva-10382-Watering Grass
- UVA 10382 Watering Grass
- UVa:10382 Watering Grass
- uva 10382 Watering Grass
- android apk 防止反编译技术第二篇-运行时修改Dalvik指令
- 抽取增量文件及合并jar包
- String.Empty,NULL和""的区别
- 如何在jsp页面计算执行时间问题
- Tree-----116. Populating Next Right Pointers in Each Node java
- UVa 10382
- 2017.7.20. 前缀和
- PHP(4)封装的mysql操作模块
- JS 实现简单切换
- fread、fwrite、fdopen
- Spring事务管理(详解+实例)
- 深度学习:识别图片中的电话号码(1)
- maven打包配置
- 第一篇博客