博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1328
阅读量:6608 次
发布时间:2019-06-24

本文共 1082 字,大约阅读时间需要 3 分钟。

一、题意:有n个小岛,坐标为(x,y)。以x轴为海岸线,在海岸线上布置雷达,雷达能覆盖半径为d的圆形区域。求最少用多少个雷达能覆盖所有的小岛

 

二、思路:以小岛为圆心,d为半径作圆,其与x轴会有两个交点。这两个交点间的线段,就是满足这题小岛要求的雷达坐标。然后将从这个线段从左到右排序,有交集的线段就表示这两个小岛可以共用一个雷达,从而转换成一个区间贪心的问题。

 

三、代码:

#include"iostream"#include"stdio.h"#include"algorithm"#include"cmath"using namespace std;int n,d;struct Node{    double x,y;};struct InterSection{    double x1,x2;};Node cor[1005];InterSection segment[1005];bool Cmp(const InterSection a,const InterSection b){    if(a.x2!=b.x2) return a.x2
b.x1;}void CalIntersection(int i){ segment[i].x1=sqrt(d*d-cor[i].y*cor[i].y)+cor[i].x; segment[i].x2=cor[i].x-sqrt(d*d-cor[i].y*cor[i].y);}double Min(double a,double b){ return a
>n>>d,n||d) { int ans=0; for(int i=0;i
>cor[i].x>>cor[i].y; if(cor[i].y>d) ans=-1; CalIntersection(i); } if(ans!=-1){ sort(segment,segment+n,Cmp); ans=Solve(); } cout<<"Case "<<++cnt<<": "<
<

  

转载于:https://www.cnblogs.com/acm-jing/p/9709932.html

你可能感兴趣的文章
获取坐标封装 getPos
查看>>
机器学习系列(一)--术语篇
查看>>
初级文件IO——open打开文件成功后行为分析
查看>>
Django-static
查看>>
virtualbox+vagrant学习-5-Boxes-2-Box Versioning
查看>>
矩阵连乘 和表达式加括号求最大值
查看>>
TIANKENG’s rice shop
查看>>
iOS-----正则表达式
查看>>
SSH2搭建步骤 struts-2.2.3.1 hibernate-3.3.2 hibernate-annotations-3.4.0 spring-3.0.5
查看>>
建模心法(3) 模型的演进——保持简单和弹性的3个建议
查看>>
石子合并加强版
查看>>
hdu 4332 Constructing Chimney
查看>>
小白出品 单元测试相关——入门级说明书
查看>>
Linux系统学习笔记(1)
查看>>
浅析设计模式(五)——原型模式
查看>>
饿猫学java——String深入浅出
查看>>
poj 3624
查看>>
Unable to make the session state request to the session state server处理方法
查看>>
图的遍历(Python实现)
查看>>
CSS 笔记——背景布局
查看>>