题意:如今我们位于沿海地区,需要安装大炮,使得火力可以覆盖整个区域。海岸线可以视为是无限长的直线。陆地位于海岸线的一侧,海洋位于另一侧。海洋里有若干个岛屿,每个小岛可以视为海洋中的一个点。我们需要在海岸线上安装大炮,每个大炮智能覆盖距离d,因此海洋中的小岛被大炮安装所覆盖的条件是两者间的距离不超过 d 。 我们将海岸线视为 x 轴。海洋的一侧位于 x 轴上方,陆地的一侧位于下方。给定海洋中每个小岛的位置(以xy坐标给出),并给定大炮的覆盖距离,你需要写程序,找出安装大炮的最少数量,使得所有的小岛都被覆盖。

题解:我们先将所有的岛屿视为圆心,以半径d做圆,如果最远距离大于d的,直接视为无法完全覆盖,输出-1;

如果全部可以覆盖,则可以认为x轴对于圆的割线就是满足题意的炮台位置,此时本题就转化为了贪心问题中的基操——区间选点问题

区间选点问题的题型:n个区间[ai,bi],在数轴上选取尽可能少的点,能保证每段区间上都能有一个点。

区间选点的贪心策略:右端点从小到大排序,如果右端点相同则左端点从大到小排序

贪心过程:标记第一个右端点为r,不断向后与下一段的左端点开始比较,如果下一段的左端点大于r,则更新r,否则一直向后找


#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std; struct node {
double x;
double y;
}island[];
struct point {
double l;
double r;
}p[];
bool cmp(point a, point b)
{
if (a.r == b.r)
return a.l > b.l;
return a.r < b.r;
}
int main(void)
{
ios::sync_with_stdio(false);
int n;
double d;
int k = ;
while (cin >> n >> d)
{
if (n == && d == ) break;
int flag = ;
for (int i = ; i < n; i++)//n是海洋中小岛的数目,d是大炮可以覆盖的距离
{
cin >> island[i].x >> island[i].y;
if (island[i].y > d || island[i].y < )
flag = ;
else
{
p[i].l = double(island[i].x - sqrt(d * d - island[i].y * island[i].y));
p[i].r = double(island[i].x + sqrt(d * d - island[i].y * island[i].y));
}
}
if (flag == )
{
cout << "Case " << k << ": " << "-1" << endl;
k++;
}
else
{
sort(p, p + n, cmp);
double r = p[].r;
int count = ;
for (int i = ; i < n; i++)
{
if (p[i].l <= r)
continue;
else
{
count++;
r = p[i].r;
}
}
cout << "Case " << k << ": " << count << endl;
k++;
}
}
return ;
}

POJ1328贪心的更多相关文章

  1. poj1328 贪心

    http://http://poj.org/problem?id=1328 神TM贪心. 不懂请自行搜博客. AC代码: #include<cstdio> #include<algo ...

  2. POJ1328贪心放雷达

    题意:        有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达. 思路:       贪心去做就行了,其实题目不 ...

  3. poj1328贪心 雷达,陆地,岛屿问题

    Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60381   Accepted: 13 ...

  4. poj1328贪心中的区间问题

    题意:给定海岛个数.雷达半径以及各海岛坐标,求能覆盖所有海岛的最小雷达数. 思路:先对每个海岛求一个区间:即能覆盖它的所有雷达的圆心所构成的区间.然后对区间排序,定义一个最右点over,依次延伸ove ...

  5. poj1328 Radar Installation(贪心 策略要选好)

    https://vjudge.net/problem/POJ-1328 贪心策略选错了恐怕就完了吧.. 一开始单纯地把island排序,然后想从左到右不断更新,其实这是错的...因为空中是个圆弧. 后 ...

  6. 《挑战程序设计竞赛》2.2 贪心法-区间 POJ2376 POJ1328 POJ3190

    POJ2376 Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14585   Accepte ...

  7. poj1328解题报告(贪心、线段交集)

    POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P ...

  8. POJ1328 Radar Installation(贪心)

    题目链接. 题意: 给定一坐标系,要求将所有 x轴 上面的所有点,用圆心在 x轴, 半径为 d 的圆盖住.求最少使用圆的数量. 分析: 贪心. 首先把所有点 x 坐标排序, 对于每一个点,求出能够满足 ...

  9. POJ-1328 Radar Installation--区间选点问题(贪心)

    题目链接: https://vjudge.net/problem/POJ-1328 题目大意: 假设陆地的海岸线是一条无限延长的直线,海岛是一个个的点,现需要在海岸线上安装雷达,使整个雷达系统能够覆盖 ...

随机推荐

  1. NodeJS及路由

    1.基本介绍- http://nodejs.cn/api/ Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node.js使用了一个事件驱动.非阻塞式I/O的模型,使 ...

  2. mysql基础-数据库表简单查询-记录(五)

    0x01 MySQL的查询操作 单表查询:简单查询                 多表查询:连续查询                联合查询 选择和投影 投影:挑选要符合的字段     select ...

  3. Centos6.5--svn搭建

    0x01 配置好镜像源安装svn yum install subversion -y 0x02 安装完成之后在/opt下面新建一个svn的目录,当然也可以在其他的地方建立svn目录,这个看个人爱好. ...

  4. k8s学习-资源清单

    4.kubernetes使用 4.1.资源清单 api 文档.api 描述 4.1.2.说明 必须存在的属性 主要的对象 额外的参数项 例子 vim my-app.yml apiVersion: v1 ...

  5. Pytest单元测试框架——Pytest+Allure+Jenkins的应用

    一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...

  6. pytorch入门2.1构建回归模型初体验(模型构建)

    pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...

  7. java处理csv文件上传示例

    前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理. ReadCsvUtil工具类 package com.hanfengyeqiao.g ...

  8. Flask 蓝图(Blueprint)使用方式解析

    Flask蓝图提供了模块化管理程序路由的功能,使程序结构清晰.简单易懂.下面分析蓝图的使用方法 假如说我们要为某所学校的每个人建立一份档案,一个很自然的优化方式就是这些档案如果能分类管理,就是说假如分 ...

  9. MQ系列(1)——rabbitMQ简介

    前文我们学习了 MQ的相关知识,现在我们来学习一下实现了AMQP协议的 rabbitMQ 中间件.rabbitMQ 是使用 erlang 语言编写的中间件(erlang之父 19年4月去世的,很伟大一 ...

  10. Dubbo——服务发布原理

    引言 在使用Dubbo的时候你一定会好奇它是怎么实现RPC的,而要了解它的调用过程,必然需要先了解其服务发布/订阅的过程,本篇将详细讨论Dubbo的发布过程. 源码分析 发布服务 新学Dubbo大都会 ...