nyoj 题目12 喷水装置(二)
喷水装置(二)
- 描述
- 有一块草坪,横向长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 有些代码还是得自己想,别人的还是看不懂。
先上代码#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
typedef pair<double,double> Segment; Segment seg[]; Segment getSeg(int x, int r, int h2) {
int p = r*r - h2*h2;
double d = sqrt(p);
double x0 = (double)x;
Segment tmp(x0-d,x0+d);
return tmp;
} int cmp(const void *a, const void *b) {
Segment at = *(Segment*)a;
Segment bt = *(Segment*)b;
return at.first - bt.first;
} int main(int argc, char const *argv[])
{
int t;
scanf("%d",&t);
while(t--) {
int n,w,h;
scanf("%d %d %d",&n,&w,&h);
int cnt = ;
int h2 = h/;
while(n--){
int x,r;
scanf("%d %d",&x,&r);
if(r <= h2) {
continue;
}
seg[cnt++] = getSeg(x,r,h2);
}
qsort(seg, cnt, sizeof(Segment),cmp);
int to = ;
int p = ;
int ans = ;
while(to < w) {
int j = p;
int maxTo = to;
while(j < cnt && seg[j].first <= to) {
if(maxTo < seg[j].second) {
maxTo = seg[j].second;
}
j++;
}
if(j == p) {
break;
}
ans++;
to = maxTo;
p = j;
}
printf("%d\n",ans);
}
return ;
}思路还是要转换成水平方向上的覆盖。这里要用到贪心的思想。
中心思想就是,选择一个可以覆盖到当前末端并且覆盖最大的线段
nyoj 题目12 喷水装置(二)的更多相关文章
- NYOJ 题目12喷水装置(二)
#include<iostream> #include<algorithm> #include<cmath> using namespace std; struct ...
- nyoj 12——喷水装置二——————【贪心-区间覆盖】
喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...
- nyoj 题目6 喷水装置
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...
- 贪心(一)NYOJ题目12
#include <iostream> #include<cmath> #include "algorithm" using namespace std; ...
- 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题
1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...
- NYOJ 12 喷水装置(二)
pid=12">喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n( ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- 九度oj 题目1009:二叉搜索树
题目1009:二叉搜索树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5733 解决:2538 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n&l ...
- NYOJ 题目15 括号匹配(二)(区间DP)
点我看题目 题意 : 中文题不详述. 思路 : 本来以为只是个小模拟,没想到是个区间DP,还是对DP不了解. DP[i][j]代表着从字符串 i 位置到 j 位置需要的最小括号匹配. 所以初始化的DP ...
随机推荐
- lnmp一键安装 nginx
官网: https://lnmp.org/install.html 1.下载完整版:http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz文件大小:715MB M ...
- Java 集合框架_上
集合框架被设计成要满足以下几个目标. 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的. 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的 ...
- C# File和Directory类
File和Directory类 作为实用类,File和Directory类都提供了许多方法,用于处理文件系统以及其中的文件和目录.这些是静态方法,涉及移动文件.查询和更新属性并创建FileStream ...
- vue-transition动画
vue-transition动画 官网API: https://cn.vuejs.org/v2/guide/transitions.html demo点击显示与消失 <div id=" ...
- java基础面试题:请说出作用域public,private,protected,以及不写时的区别
不写任何作用域(即访问权限)表示friendly public 公共,权限最大,作用域最大,在类内部.同一package.子孙类.其他package都可以访问 protected保护,在类内部.同一p ...
- MySQL - FULL JOIN
SQL FULL JOIN 关键字 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行. FULL JOIN 关键字语法 SELECT column_name(s) FROM table_n ...
- grep与正则表达式使用
grep简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.通常grep有三种版本grep.egrep(等同于grep -E)和fgrep.egrep为扩展的g ...
- 十、MySQL 删除数据表
MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...
- Thinkphp5封装上传图片
<?php namespace app\api\controller; use think\Controller; use think\Db; class Plus extends Base{ ...
- Pycharm中F4查看函数的相关小BUG
我们都知道在Pycharm中我们要快速查看某个函数或者模块的源码,可以在该函数上按F4快捷键,其可以打开源码相关的.py文件,这两天偶然发现起打开的文件不一定是对的. -代码如下: import os ...