题目地址:http://poj.org/problem?id=1328

Sample Input

3 2
1 2
-3 1
2 1 1 2
0 2 0 0

Sample Output

Case 1: 2
Case 2: 1

参考博客地址:http://www.cnblogs.com/jackge/archive/2013/03/05/2944427.html
分析:一个岛屿坐标(x,y),在x轴上会存在一个线段区间,在这个线段区间内任意位置放置雷达都可以。
int dd=sqrt(d*d-y*y); [(double)x-dd, (double)y+dd]就是这个区间。注意区间的左右要用double类型。

当然啦如果雷达本来就覆盖不到(y>d),则是另当别论。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <algorithm> using namespace std; int n, d; struct node
{
double ll, rr;
bool operator<(const node &dd)const{
return ll<dd.ll;
}
}seg[1010]; int main()
{
int i, j;
int cnt=1;
int x, y;
bool flag; while(scanf("%d %d", &n, &d)!=EOF ){
if(n==0 && d==0 ) break; flag=true;
for(i=0; i<n; i++)
{
scanf("%d %d", &x, &y);
double dd=sqrt((double)(d*d)-y*y );
seg[i].ll = x-dd;
seg[i].rr = x+dd;
if( y>d ){ //有的岛屿位置太高, x轴上的雷达无法覆盖到 即d<当下岛屿的y
flag=false;
}
}
if(flag==false){
printf("Case %d: -1\n", cnt++); //无法解决
continue;
}
sort(seg, seg+n);
int ans=1;
node cur; cur=seg[0]; for(i=1; i<n; i++){
double li=seg[i].ll; double ri=seg[i].rr;
//一定是double类型
if( cur.rr >= ri){
cur=seg[i];
}
else if(cur.rr<li ){
ans++; cur=seg[i];
}
}
printf("Case %d: %d\n", cnt++, ans );
}
return 0;
}
												

最新文章

  1. visual studio 2015连接到MySql相关问题
  2. cordova plugin add出现CERT_UNTRUSTED错误解决方法
  3. string.Join()的用法
  4. [Android]ListView的Adapter.getView()方法中延迟加载图片的优化
  5. HTML DOM 事件
  6. 运行iis出现:The server has encountered an error while loading an application ……的解决办法【转】
  7. How to do logging in C# with log4net
  8. IBM开发者 JSON 教程
  9. c/c++中主线程退出,子线程也会退出
  10. Matlab生成动态链接库供C#调用
  11. Sum It Up(搜索)
  12. Mysql高级之权限检查原理
  13. css 浮动和清除浮动
  14. LeetCode 11. Container With Most Water (装最多水的容器)
  15. iOS-沙盒目录
  16. hdu 5430(几何)
  17. Nginx之(一)Nginx是什么
  18. python字符串操作实方法大合集
  19. 20175303 2018-2019-2 《Java程序设计》第8周学习总结
  20. as3.0控制声音大小

热门文章

  1. 无需Root实现Android手机屏幕流畅投影到电脑进行演示(附软件下载)
  2. docker 让容器执行命令 与 进入容器交互
  3. EularProject 39:给周长推断构成直角三角形个数
  4. Log4J 基本使用
  5. 【ubantu】Ubuntu的一些常用快捷键
  6. 【JMeter4.0学习(十一)】之JMeter对(Mysql、Oracle)数据库性能测试脚本开发
  7. 时下世界上最先进的液晶面板技术---ips
  8. html5小趣味知识点系列(一)pubdate
  9. WPF使用X:Static做多语言支持
  10. Coursera machine learning 第二周 编程作业 Linear Regression