poj1328Rader_installation

2024-06-17 14:58
文章标签 installation poj1328rader

本文主要是介绍poj1328Rader_installation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这道雷达题目是我们大三算法分析与设计考试的最后一个大题。当时写代码用手写的,也没有验证。今天终于验证了我的方法是正确的。题意:笛卡尔坐标系的x轴上安置雷达,使雷达可以覆盖x轴及其上方有若干个岛屿,要求最少使用的雷达数。
思路:要覆盖一个岛屿,雷达的位置可以确定一个范围(以岛屿为圆心,雷达覆盖半径为半径的园和x轴相交形成的切线)。而要使雷达的数目最少,则需要使每一个雷达能覆盖的岛屿的数量尽量的多一些。所以将岛屿以x坐标按升序排列。由左到右遍历岛屿,将范围相交的算作一个雷达,直到找不到范围相交的,再增加雷达数接着将所有范围相交的算在一起。直到遍历完成。此题应该注意的是浮点数的大小比较的时候尽量使用做差之后和零比较大小(计算机组成原理)。还有注意有岛屿的y坐标刚好是雷达覆盖半径的时候的范围比较。还有雷达的覆盖半径不能为负数。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
struct island
{int x;int y;double left;double right;
};struct island isl[1005];bool cmp_isl(island a,island b)
{return a.x<b.x;
}
int main()
{int n,d,casen=0;while(scanf("%d%d",&n,&d)&&n){casen++;getchar();for(int i=0;i<n;i++)                                    {scanf("%d%d",&isl[i].x,&isl[i].y);getchar();}getchar();printf("Case %d:",casen);sort(isl,isl+n,cmp_isl);int sum=0;for(int i=0;i<n;i++){double b = d*d-isl[i].y*isl[i].y;if(b<0){sum--;break;}b = sqrt(b);isl[i].left = isl[i].x-b;isl[i].right = isl[i].x+b;}if(sum<0||d<0) printf(" -1\n");else if(n==1) printf(" 1\n");else {int t=0;double l = isl[t].left;double r = isl[t].right;t++;sum++;while(t<n){bool isok = isl[t].left-l>=0&&isl[t].left-r<=0||isl[t].right-l>=0&&isl[t].right-r<=0;isok = isok||isl[t].left-l<=0&&isl[t].right-l>=0||isl[t].right-r>=0&&isl[t].left-r<=0;if(isok){l = isl[t].left>l?isl[t].left:l;                                                          r = isl[t].right<=r?isl[t].right:r;}else{sum++;l = isl[t].left;r = isl[t].right;     }t++;}printf(" %d\n",sum);}}return 0;    
}

这篇关于poj1328Rader_installation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069765

相关文章

[2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [20

[2016-04-19 15:46:03 - IceHoloReader1.0] Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER [2016-04-19 15:46:03 - IceHoloReader1.0] Please check logcat output for more details. [2016-04-19 15:

Ubuntu 安装时 Installation type 为空

可能是磁盘的 GPT table 不正确,先尝试修复 GPT table

stata17中java installation not found或java not recognozed的问题

此问题在于stata不知道去哪里找java,因此需要手动的告诉他 方法1:  1.你得保证已经安装并配置好java环境   2.在stata中输入以下内容并重启stata即可 set java_home "D:\Develope\JDk17"      其中java_home后面的""里面的内容是你的jdk安装路径 我的电脑是在 D:\Develope\JDk17,你把自己电脑的jdk

在Ubuntu上解决 “qmake: could not find a Qt installation of ‘‘” 错误

在Ubuntu上运行qmake命令生成Makefile时,遇到了以下错误: qmake: could not find a Qt installation of '' 即使我安装了以下软件包,也未能解决此问题: sudo apt-get install qt4-qmakesudo apt-get install qt5-qmake 如果你也遇到了类似的情况,希望以下方法能帮助你解决问

[POJ 1328] Radar Installation (区间贪心)

POJ - 1328 给定若干个 x轴上方的点,要求最少的圆,使得每个点都被圆覆盖 其中圆心在 x轴上,半径为 D 有一个很直接的贪心思路,就是先考虑最左边未覆盖的点 在覆盖它的情况下,尽量把圆向左移。 这个做法是错误的,因为圆并不是矩形,例如以下数据 Input: 2 3 0 0 1 3 Output: 1 正确的做法是预处理出覆盖每个点的圆心的范围 然

安装Docker Desktop报错WSL 2 installation is incomplete(实操教程)

点击运行提示WSL2安装不完整问题描述:WSL 2 installation is incomplete. The WSL 2 Linux kernel is now installed using a separate MSl updatepackage. Please click the link and follow the instructions to install thekernel

Virtualbox7.0版本安装报错:Invalid installation directory

错误情况 我在安装virtualbox最新版7.0.18时候,因为默认安装在C盘,我改成了E盘,然后就报错 Invalid installation directoryThe chosen installation directory is invalid, as it does not meet the security requirements. Refer to the Oracle

idea 或 Android Studio 报错 Error:Could not run build action using Gradle installation

原址:点击打开链接 Try this: 1) File -> Invalidate caches / Restart 2) Shutdown Android Studio 3) Remove .gradle folder in the user home directory 4) Restart Android Studio let it download all t

VirtualBox installation failure on Windows

错误:When I try to install VirtualBox 1.6.2, at the end of the installation it says "Rolling back action", removes all previously installed files and then the installation gives me the following message