贪心算法之——喷水装置二(nyoj12)

【C++】「一本通 1.1 例 3」喷水装置(Watering Grass) 「一本通 1.1 例 2」种树【来源】【题目描述】【输入格式】【输出格式】【输入样例】【输出样例】【数据范围】【解析】【代码】 【来源】 一本通题库-1424 UVA-10382 LibreOJ-10002 Kattis-grass vjudge 各题库题目意思相同,但输入格式、数据范围略有不同。 【题目描述】 长 LLL 米,宽 WWW 米的草坪里装有 nnn 个浇灌喷头。每个喷头都装在草坪中心... 阅读详情

题目描述:

喷水装置(二)

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
有一块草坪,横向长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


分析:

这是贪心中区间覆盖的问题:

数轴上有n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定线段[s,t].(而这一题的变化在于要先对数据进行处理把圆心和半径,转换成区间的[ai,bi])

本题的突破口在与区间包含和排序扫描,把各区间按照a从小到大排序。如果区间1的起点不是<=s,无解(因为其他区间的起点更大,不可能覆盖到s点),否则选择起点在s(或s之前)的右端点b最大的区间。选择此区间[ai,bi]后,新的起点应该设置为s=bi。然后继续向后扫描,直到所有区间扫描完毕,判断选择的最后一个区间的右端点bi是否小于t,小于则无解。

源码:

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
typedef struct line
{
	double left, right; 
}Line;

bool cmp(Line l1,Line l2)
{
	return l1.left < l2.left;
}
int main()
{
	int t;
	scanf("%d", &t);
	while(t--)
	{
		Line l[10005]={0};
		int n, w, h;
		double x, r;
		scanf("%d%d%d", &n, &w, &h);
		for(int i=0; i<n; i++)
		{
			scanf("%lf%lf", &x, &r);
			if(2*r>h)
			{
				double temp = sqrt(r*r-h*h/4.0);
				l[i].left = x-temp;
				l[i].right = x+temp;
			}
		}
		sort(l, l+n, cmp);
		double start=0.0;
		if(l[0].left>start) puts("0");	//如果区间1的起点不是<=start,无解
		else
		{
			int i=0,max=0,cnt=0;
			while(1)
			{
				for(; i<n; i++)
				{
					if(l[i].left<=start)
					{//选择起点在start(或start之前)的右端点b最大的区间
						if(l[i].right>l[max].right) max = i;	
					}
					else break;
				}
				start = l[max].right;
				if(l[i].left>start) {puts("0"); break;}
				cnt++;
				//判断选择的最后一个区间的右端点bi是否小于w,小于则无解。
				if(i==n && l[max].right<w) {puts("0"); break;}  
				if(start>=w) {printf("%d\n", cnt); break;}
			}
		}
	} 
	return 0;
}


题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=12


nyoj 题目6:喷水装置(一)贪心算法 喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。 阅读详情

相关推荐

NYOJ - 12:喷水装置(二)

NYOJ-12:喷水装置(二) 来源:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=12 标签:排序,贪心算法,区间覆盖 参考资料: 相似题目: 题目 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n&lt;=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让...

WINGREZ‘S BLOG 622

「一本通 1.1 例 3」喷水装置(贪心)

长 L 米,宽 W 米的草坪里装有 n 个浇灌喷头。每个喷头都装在草坪中心线上(离两边各 W / 2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。 请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头? 输入格式 输入包含若干组测试数据。 第一行一个整数 T表示数据组数; 每组数据的第一行是整数 n 、L 和W ; 接下来的 n 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。 输出格式 对每组测试数据输出一个数字,表

Piink的博客 536

【VAX 小番茄安装详细步骤】

本文详细介绍了在VS2022环境下安装Visual Assist X(番茄助手)的步骤及常见问题解决方案。主要内容包括:安装前的兼容性设置(需修改为Windows7兼容模式)、安装流程(卸载旧版本、勾选对应VS版本、替换关键dll文件)以及常见问题处理(如安装失败、工具栏图标缺失等)。文章提供了完整的下载链接和操作截图,特别强调了安装失败后的清理方法(注册表、安装目录和残余文件删除)。最后给出了安装成功后的测试运行指引。

qq_23962581的博客 1718

例3.喷水装置

【代码】例3.喷水装置。

ag12345_的博客 548

用Python+NumPy手把手实现分数阶傅里叶变换(FRFT),搞定线性调频信号分析

本文详细介绍了如何使用Python和NumPy实现分数阶傅里叶变换(FRFT),特别针对线性调频信号(Chirp信号)分析。通过从零开始的代码实现和可视化案例,展示了FRFT在时变信号处理中的强大能力,帮助工程师和研究人员高效分析频率随时间变化的信号。

weixin_29062823的博客 218

SAP MM新手避坑指南:工厂间调拨用301还是303?手把手教你选对移动类型

本文深入解析SAP MM模块中工厂间调拨的301与303移动类型,帮助新手避开常见陷阱。通过对比一步法(301)和两步法(303+305)的核心差异、适用场景及财务影响,提供清晰的决策框架和实战技巧,确保库存调拨的准确性和效率。

weixin_29223603的博客 346

1424:【例题3】喷水装置

长 LL 米,宽 WW 米的草坪里装有 nn 个浇灌喷头。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出 −1−1。接下来的 nn 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。时间限制: 1000 ms 内存限制: 65536 KB。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

a13990636586的博客 478

npm报错 npm WARN deprecated....的问题解决方式

报错 :npm WARN deprecated … 现象:无法进行有效的vue项目的部署以及npm install 命令的执行。 原因一:版本问题 说明:由于npm的版本过低或者过高导致的报错 检查版本: npm -v 如果版本是比较旧的,或者是最新的,这里可以进行对npm的更新和回退。 更新npm版本: npm updated -d 查看可以更新的版本 npm install -g npm 默认安装最新版本 安装回退指定的版本: npm updated -d 查看所有的版本 npm -g i.

任聪聪的博客 16万+

1424:喷水装置

【题目描述】 长LL米,宽WW米的草坪里装有nn个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W2W2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。 请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头? 【输入】 输入包含若干组测试数据。 第一行一个整数TT表示数据组数; 每组数据的第一行是整数nn、LL和WW; 接下来的nn行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况...

C_Dreamy的博客 901

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3205

基于simulink的智能驾驶领域--智能车道保持辅助系统仿真

LKAS通过摄像头等传感器检测车辆相对于车道线的位置,并自动调整转向,以帮助驾驶员保持在车道内行驶。将摄像头传感器模块的输出连接到车道线检测模块的输入端口,再将车道线检测模块的输出连接到转向控制器模块的输入端口,最后将转向控制器模块的输出连接到车辆动力学模型的转向输入端口,形成闭环控制系统。上升时间是指系统从初始转向角上升到目标转向角所需的时间,调节时间是指系统进入并保持在目标转向角一定范围内的所需时间。该控制器将根据摄像头传感器的数据调整车辆的转向角,以保持车辆在车道内行驶。

xiaoheshang_123的博客 162

nyoj 题目12:喷水装置(二)贪心算法

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共有n次测

BBHHTT的博客 707

环境仿真软件:EcoPath with Ecosim_(4).Ecosim模型动态模拟

Ecosim 是 EcoPath with Ecosim (EwE) 软件中的动态模拟模块,用于模拟生态系统中各个组分的动态变化过程。Ecosim 模型通过时间序列数据和动态参数,可以预测生态系统在不同管理措施下的响应。时间序列数据的输入:用户可以输入历史数据,如捕捞努力、生物量、环境因子等,用于校准模型。动态参数的设置:用户可以设置被捕食率、生长率、捕捞死亡率等动态参数,以反映生态系统的变化。模拟结果的分析。

kkchenjj的博客 893

NYOJ12——喷水装置(二)(贪心算法)

题目描述: 分析: 这道题其实跟喷水装置的思路是一样的,不过这里需要把数据转换一下,根据以给点的坐标和半径算出该装置可以覆盖的区间。这样就把问题转化成了找出最小的区间数去完全覆盖一个给定的区间。这里做了一点优化。如果该装置连高都不能覆盖,肯定不进行考虑。 将所有可以覆盖到高的装置加入数组中,用j来记录实际有多少个可用装置。然后对可用的装置进行排序,按照区间的起始点升序排列,如果起始点相同,按

kay_zhyu的专栏 1093

【机器人学】常用的小车底盘运动学模型推导(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对小车底盘运动学模型介绍做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容对于小车的分析,仅仅考虑XY轴的线速度和Z轴的角速度,不考虑和横滚和俯仰的速度,【防盗标记–盒子君hzj】也不考虑Z轴的高度变化【即:车底盘的运动可以用三个独立变量来描述:x轴平动、y轴平动、yaw轴转动】

qq_35635374的博客 1931

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

NYOJ 12 喷水装置(二)(贪心算法)

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共有n次测

Dreamlandz的博客 590

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

《贪心算法》— NYOJ 12 喷水装置(二)

喷水装置(二) 时间限制:3000ms | 内存限制:65535KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入 第一行输入一个正整数N表示共有n次测试数据。 每一...

69小石头的博客 599

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NYOJ——12 喷水装置(二)(区间覆盖)

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共有n次测

逝水流年轻染尘 462

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

1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5] 解题过程: 1将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5],[3,6],[3...

weixin_34216036的博客 94

NYOJ12喷水装置(二)

//NYOJ12喷水装置(二) //区间覆盖问题之完全覆盖; #include #include #include #include #include #include using namespace std; typedef struct Node { double x; double r; double begin; double end; }Node; Node a[10001];

静-静的雪 602

《贪心算法》— NYOJ 贪心算法题目汇总(一)

题目6 题目信息 运行结果 本题排行 讨论区 喷水装置(一) 时间限制:3000ms | 内存限制:65535KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿...

69小石头的博客 5251

nyoj 题目12 喷水装置(二)

喷水装置(二) 时间限制:3000ms | 内存限制:65535KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共...

aling1199的博客 177

NYOJ 12 喷水装置(二)

NYOJ 12 喷水装置(二) 贪心算法

千里孤坟'blog 361

喷水装置(二)-NYOJ

喷水装置(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。 输入第一行输入一个正整数N表示共有n次测

zha_hao_hao_15的博客 525
上一篇: 图论之——单词拼接(nyoj99)(欧拉图+回溯)
下一篇: 动态规划之——拦截导弹(nyoj79)
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值