1424. 喷水装置

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

题目描述】

长 L𝐿 米,宽 W𝑊 米的草坪里装有 n𝑛 个浇灌喷头。每个喷头都装在草坪中心线上(离两边各 W2𝑊2 米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。

请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

【输入】

输入包含若干组测试数据。

第一行一个整数 T𝑇 表示数据组数;

每组数据的第一行是整数 n𝑛、L𝐿 和 W𝑊;

接下来的 n𝑛 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。

【输出】

对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出 −1−1 。

【输入样例】

3
8 20 2
5 3
4 1
1 2
7 2
10 2
13 3
16 2
19 4
3 10 1
3 5
9 3
6 1
3 10 1
5 3
1 1
9 1

【输出样例】

6
2
-1

【提示】

数据范围:

对于 100% 的数据,n≤15000。

【分析】

将圆的覆盖转换为矩形覆盖,在长为L,宽为W的矩形中,查找全覆盖的最少喷头数量。需要考虑两个问题:

1. 2*r <= w时,这个喷头不能覆盖矩形,在矩形里画一个圆就能发现了。

2. 计算喷头覆盖范围左端点、右端点位置,即线段的左、右端点位置,要用到勾股定理,具体请看借来的一张图。图片来源

if(r*2 > w){//舍弃r*2<=w的喷头,即不能覆盖的喷头
				a[cnt].x = d - sqrt(r*r - w*w/4.0);
				a[cnt].y = d + sqrt(r*r - w*w/4.0);
				cnt++;
			}

本题适用于贪心算法,当存在多条左端点小于当前右端点时,选最长的一个。我将样例中一个数据用图展示,最后三段那边体现了贪心算法,蓝色线段未选择,选择了黄色线段。

【code】

#include <bits/stdc++.h>

struct Node{
	double x,y;
}a[15005];
bool comp(Node x,Node y){
	if(x.y == y.y)
		return x.x < y.x;
	return x.x < y.x;
}
using namespace std;
int main(int argc, char *argv[]) {
	int t;
	cin >> t;
	
	while(t--){
		int l,n,w,cnt = 0,ans = 0;
		cin >> n >> l >> w;
		
		for(int i = 0; i < n; i++){
			int d,r;
			cin >> d >> r;
			if(r*2 > w){//舍弃r*2<=w的喷头,即不能覆盖的喷头
				a[cnt].x = d - sqrt(r*r - w*w/4.0);
				a[cnt].y = d + sqrt(r*r - w*w/4.0);
				cnt++;
			}
		}
		sort(a,a+cnt,comp);//排序
		double left = 0,right = 0;
		int i = 0;
		//搜索排序后的线段
		while(right < l){
			left = right;
			//当存在多条左端点小于当前右端点时,选最长的一个,体现贪心的算法
			for(; i < cnt && a[i].x <= left; i++){
				if(a[i].y > right){
					right = a[i].y;
				}
			}
			//left == right,说明上面的循环查找时,没有找到能够继续覆盖的,存在空挡
			if(left == right && right < l){
				cout << "-1" <<endl;
				break;
			}
			ans++;//统计开启的喷头
		}
			if(right >= l){
				cout << ans << endl;
			}
	}
	return 0;
}

C++喷水装置 贪心思想,简单 #include <iostream> #include <cmath> using namespace std; #define N 100001 double a[N]; double square(double a, double b) { return sqrt(a * a - b * b); } void q_sort(int l, int r) { int i = l, j = r; double mid = a[(i + j) / 2]; do 阅读详情

相关推荐

1424:喷水装置——1425:加工生产调度【贪心之区间问题和流水调度问题】

1424:喷水装置——1425:加工生产调度【贪心之区间问题和流水调度问题】

lybc2019的博客 651

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

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

Piink的博客 536

FCN---训练cityspaces

未经允许,不要随意转载! 最近想试试用FCN训练自己的数据集,想想标注是一件很费劲的事,于是就想到了用其他库里的数据,这里选用了cityspaces,默认已经配置好FCN. 1、下载cityspaces https://www.cityscapes-dataset.com/ 需要注册一个账号 cityspaces包含2...

wangyu088的专栏 2030

1424:【例题3】喷水装置

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

a13990636586的博客 478

IMU数据处理避坑指南:从理论到实践的加速度计重力消除方案

本文详细解析了IMU数据处理中的重力消除技术,从理论基础到实践应用,涵盖了加速度计和陀螺仪的核心问题。通过ROS2实战案例,介绍了静态标定与动态校准的技术对比,以及多传感器融合的进阶策略,帮助开发者避免常见陷阱,提升IMU数据处理的精度和效率。

purple的博客 741

前端实现微信扫一扫的思路

本篇文章的关键点就是讲解了我在实现处理多张二维码的场景时的思路,利用canvas遮挡识别过的二维码这个思路是pbk-bin大佬最先想到的,在实现这个需求以后还是很感叹这个思路的巧妙。👏pbk-bin🎁~如果文章对你有帮助,不妨赠人玫瑰,手有余香,预计将会在下篇更新较为完整的微信扫一扫界面和功能。

fang_my的博客 2488

例3.喷水装置

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

ag12345_的博客 548

PX4飞控神经网络控制:从仿真到嵌入式部署实战

神经网络控制正逐步革新传统PID在无人机领域的统治地位。通过将深度学习模型部署到PX4飞控硬件,实现了从传感器数据直接生成电机指令的端到端控制。这种架构依赖TensorFlow Lite Micro等轻量级推理框架,在STM32等嵌入式处理器上可达到93μs级推理速度。关键技术突破包括:基于NVIDIA Isaac Gym的高效仿真训练、模型量化压缩技术(如8位整数量化)、以及与PX4原生安全架构的无缝集成。该方案在mRobotics Pixracer Pro等硬件上验证了可行性,为无人机姿态控制、视觉导航

weixin_30570101的博客 403

奥赛一本通 1424 喷水装置

奥赛一本通 1424 喷水装置

qq_39680218的博客 457

[DDR5]DDR5 SDRAM 状态图 和 基本功能

DDR5 SDRAM的读写操作以突发(burst mode)为导向,从选定的位置开始,并按照编程顺序进行16个突发长度或8个“切片”突发长度的操作。从ACTIVATE命令开始,然后是读取或写入命令。

串起点滴 1200

G.6 PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】

百度飞桨:ERNIE 3.0 、通用信息抽取 UIE、paddleNLP的安装使用[一]_汀、的博客-优快云博客PaddleHub--飞桨预训练模型应用工具{风格迁移模型、词法分析情感分析、Fine-tune API微调}【一】_汀、的博客-优快云博客 PaddleHub--{超参优化AutoDL Finetuner}【二】_汀、的博客-优快云博客PaddleHub实战篇{词法分析模型LAC、情感分类ERNIE Tiny}训练、部署【三】_汀、的博客-优快云博客通过前面几篇文章大家都有一定了解,下面

丨汀、的博客 6185

1424 喷水装置

1424 喷水装置 所关于贪心的问题,大部分都是这些类似于区间段重合问题 也就是给定n个喷水的装置,再给定他们的喷水范围,问要想让所有的草坪都能被喷到水,最少需要多少水龙头? 一个圆看上去可以利用的地方很多,实际上就只有中间的部分可以利用 所以我们把圆转化成线段 a[cnt].s =p -sqrt((rr)-(w/2.0)(w/2.0)); a[cnt].e =p +sqrt((rr)-(w/2.0)(w/2.0)); 其中结构题记录转成线段后的起点和终点 转化成线段就可以把题目转化成刚才做过的那道题了

CCCCDEV_CCCC的博客 646

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

信息学奥赛一本通 1424:【例题3】喷水装置

设p位置的喷头半径为r,圆心为P半径为r的圆与草坪上边界线段相交于点A和点C。该题问最少使用多少喷头可以覆盖草坪,即询问在给定多个区间中最少选择多少区间可以覆盖给定的线段。每个喷头覆盖的区域是一个圆形,草坪上被一个喷头覆盖的有效区域是一个矩形,该矩形的左端点坐标到右端点坐标形成一个线段。的左端点,第0位置就不会被任何区间包含,这就不是一组解了。这一次选择的,也就是唯一包含第0位置的区间,记该区间为。:上一次选择的区间的右端点,初值为0。的左端点大于0,后面的区间左端点都大于。的喷头可以完整覆盖一段草坪。

君义NOIP的博客 1375

2025年软件测试职业院校技能大赛—ERP管理平台-采购管理采购入库模块测试用例

竞赛对接软件测试相关标准,以“ERP管理平台” 为被测系统,围绕软件测试领域的主流技术及工具,考查选手面 对实际问题的综合分析能力,对测试文档、测试用例的设计能力, 对单元测试、自动化测试、性能测试、接口测试等测试工具及方 法的掌握程度,检验选手团队协作能力、组织规划能力、方法运用能力等。

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 401

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

1424:喷水装置

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

C_Dreamy的博客 901

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

一本通-1424:【例题3】喷水装置 区间覆盖问题

一本通-1424:【例题3】喷水装置 区间覆盖问题 贪心

m0_46183615的博客 647

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

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

信息学奥赛一本通提高篇 1424:【例题3】喷水装置 贪心算法

长 L𝐿 米,宽 W𝑊 米的草坪里装有 n𝑛 个浇灌喷头。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。对每组测试数据输出一个数字,表示要浇灌整块草坪所需喷头数目的最小值。如果所有喷头都打开也不能浇灌整块草坪,则输出 −1−1。接下来的 n𝑛 行,每行包含两个整数,给出一个喷头的位置和浇灌半径(上面的示意图是样例输入第一组数据所描述的情况)。按各喷头起点从小到大排序,优先选能覆盖当前起点,且终点最大的。注意,如果喷洒半径小于W/2,则该喷头可以忽略。输入包含若干组测试数据。

长春高老师编程 1450

一本通网站 1424:【例题3】喷水装置 及 贪心总结

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

weixin_30279751的博客 422

1424:【例题3】喷水装置 信息学奥赛一本通 贪心算法

该问题的核心在于如何通过最少数量的喷头来覆盖整个草坪。由于喷头只能沿中心线布置,并且其覆盖范围是一个圆形区域,我们需要计算每个喷头实际可以覆盖的草坪长度范围,然后选择最少量的喷头来覆盖整个草坪长度。在一个长为 L 米,宽为 W 米的草坪里装有 n 个浇灌喷头。每个喷头都安装在草坪中心线上(离两边各 W/2 米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。在这个问题中,我们可以采用贪心策略来解决。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?

2301_80881806的博客 745

T1424 喷水装置(信息学奥赛一本通)(贪心)

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

qq_45949914的博客 433
上一篇: 1423. 种树
下一篇: 1425. 加工生产调度
mapleleafcn
博客等级 码龄16年 55粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值