12-喷水装置(二)

内存限制:64MB
时间限制:3000ms
Special Judge: No

accepted:10
submit:30

题目描述:

有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。

输入描述:

第一行输入一个正整数N表示共有n次测试数据。
每一组测试数据的第一行有三个整数n,w,h,n表示共有n个喷水装置,w表示草坪的横向长度,h表示草坪的纵向长度。
随后的n行,都有两个整数xi和ri,xi表示第i个喷水装置的的横坐标(最左边为0),ri表示该喷水装置能覆盖的圆的半径。

输出描述:

每组测试数据输出一个正整数,表示共需要多少个喷水装置,每个输出单独占一行。
如果不存在一种能够把整个草坪湿润的方案,请输出0。

样例输入:

复制

2
2 8 6
1 1
4 5
2 10 6
4 5
6 5

样例输出:

1
2 分析:
  ①、因为是圆组合成一条线的问题所以我们应该清晰认识到的是 --> 圆在该区域的有效长度 L = (sqrt(r^2 - (h/2)^2))
  ②、因为圆的有效长度为L,所以半径小于 (h/2) 的圆完全没有考虑的必要了(酱紫:要考虑的圆将会减少一定的数量) 步骤:
  ①、根据输入的位置坐标和半径情况构建出每个圆的有效区域,并将其存放在结构体中
  ②、从左到右遍历寻找一组这样的区域:“左端 小于 初始点” && “右端 大于 初始点” && “有端点的值最大”
  ③、将最大的右端点作为下一个初始点
  ④、循环 ②、③ 步,知道能够全部覆盖草坪或喷泉用完 核心代码:
  
 double L_flag = , R_flag;
for(int i = ; i < n; ++ i)
{
if(P[i].l <= L_flag)
{
R_flag = P[i].r;
while(P[i].l <= L_flag && i < n)
{
R_flag = max(P[i].r, R_flag);
++ i;
}
-- i;
cnt ++;
L_flag = R_falg;
}
if (L_flag >= w)
{
printf("%d\n", cnt);
break;
}
}
C/C++代码实现(AC):
 #include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <stack> using namespace std; struct node
{
double l, r;
} P[]; bool cmp(node a, node b)
{
return a.l < b.l;
} int main ()
{
int t;
scanf("%d", &t);
while (t --)
{
int cnt = , n, flag = ;
double w, h; // n 装置个数、 w长度、 h 高度
scanf("%d%lf%lf", &n, &w, &h);
for(int i = ; i < n; ++ i)
{
double x, r, temp;
scanf("%lf%lf", &x, &r);
if (r > (h / ))
{
temp = sqrt(r * r - (h / ) * (h / ));
P[i].l = x - temp;
P[i].r = x + temp;
}
else
{
P[i].l = x;
P[i].r = x;
}
}
sort(P, P + n, cmp); double L_flag = 0.0, R_flag;
for(int i = ; i < n; ++ i)
{
if(P[i].l <= L_flag)
{
R_flag = P[i].l;
while(P[i].l <= L_flag && i < n)
{
R_flag = max(R_flag, P[i].r);
++ i;
}
-- i;
L_flag = R_flag;
cnt ++;
}
if(L_flag >= w)
{
flag = ;
printf("%d\n", cnt);
break;
}
}
if(!flag) printf("0\n");
}
return ;
}

nyoj 12-喷水装置(二)(贪心)的更多相关文章

  1. nyoj 12——喷水装置二——————【贪心-区间覆盖】

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...

  2. 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题

    1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...

  3. NYOJ 12 喷水装置(二)

    pid=12">喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n( ...

  4. NYOJ 12:喷水装置(二)(贪心,区间覆盖问题)

    12-喷水装置(二) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:28 提交数:109 难度:4 题目描述: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n ...

  5. nyoj 题目12 喷水装置(二)

    喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...

  6. NYOJ 题目12喷水装置(二)

    #include<iostream> #include<algorithm> #include<cmath> using namespace std; struct ...

  7. NYOJ 6.喷水装置(一)-贪心

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...

  8. UVa 10382 喷水装置(贪心)

    https://vjudge.net/problem/UVA-10382 题意: 有一个长为l,宽为w的草坪,在其中心线不同位置有n个点状的喷水装置,喷水坐标为p,喷水半径为r.求喷到所有草坪的最少喷 ...

  9. nyoj 16-矩形嵌套(贪心 + 动态规划DP)

    16-矩形嵌套 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:13 submit:28 题目描述: 有n个矩形,每个矩形可以用a,b来描述,表示长和 ...

  10. Codeforces Testing Round #12 B. Restaurant 贪心

    B. Restaurant Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/597/problem ...

随机推荐

  1. 浅谈线段树 Segment Tree

    众所周知,线段树是algo中很重要的一项! 一.简介 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点. 使用线段树可以快速的查找某一个节点在 ...

  2. 利用Tampermonkey(油猴)+IDM实现百度云盘大文件下载;

    1.浏览器的脚本选择: 说明:不同的浏览器安装的名称不一样,这里采用Firefox做测试,同样可按照以下列表对应下载: Chrome:Tampermonkey 或 Violent monkey Fir ...

  3. PHP5底层原理之垃圾回收机制

    概念 垃圾回收机制 是一种内存动态分配的方案,它会自动释放程序不再使用的已分配的内存块. 垃圾回收机制 可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑. 与之相关的一个概念,内存 ...

  4. 阿里巴巴开源故障注入工具_chaosblade

    chaosblade是阿里巴巴最近开源的一款故障注入的工具,因为我最近在做公司的虚拟化平台的可靠性测试工具,无意中发现这个工具,个人感觉比较有用,用起来也比较简单,所以拿出来分享一下,期望对大家的工作 ...

  5. electron调用c#动态库

    electron调用c#动态库 新建C#动态库 方法要以异步任务的方式,可以直接包装,也可以写成天然异步 代码如下 public class Class1 { public async Task< ...

  6. Spring Data - Spring Data JPA 提供的各种Repository接口

    Spring Data Jpa 最近博主越来越懒了,深知这样不行.还是决定努力奋斗,如此一来,就有了一下一波复习 演示代码都基于Spring Boot + Spring Data JPA 传送门: 博 ...

  7. 【强烈推荐】可能是最适合你的 Java 学习路线和方法

    如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...

  8. 记录一次诡异的Maven Profile不生效的问题

    记录一次诡异的Maven Profile不生效的问题 现象 maven 打包之后,复制的 profile对应的resource文件总是不正确的. 即便是加了 mvn clean package -P ...

  9. Flask:数据库的建模

    学习完模板系统,接下来要研究的就是框架对数据库的操作,不论python的那个框架,直接使用数据库API(redis.pymysql等)都可以进行操作,但是这些操作不够方便,于是就有了ORM 1.Fla ...

  10. 机器阅读理解(看各类QA模型与花式Attention)

    目录 简介 经典模型概述 Model 1: Attentive Reader and Impatient Reader Model 2: Attentive Sum Reader Model 3: S ...