poj1328
来源:互联网 发布:chrome linux 编辑:程序博客网 时间:2024/06/15 07:34
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxx=1010;
struct node
{
double left,right;
}a[maxx];
bool cmp(node i,node j)
{
return i.left<j.left;
}
int main()
{
int n,d,t=0;
while (cin>>n>>d)
{
if (n==0&&d==0) break;else t++;
int x,y,flag=1;
for (int i=1;i<=n;i++)
{
cin>>x>>y;
if (y>d) flag=0;
a[i].left=x-sqrt(d*d-y*y);
a[i].right=x+sqrt(d*d-y*y);
}
if (flag)
{
sort(a+1,a+1+n,cmp);
int ans=1;
double radar;
radar=a[1].right;
for (int i=2;i<=n;i++)
{
if (a[i].right<radar) radar=a[i].right;
else if (a[i].left>radar)
{
ans++;
radar=a[i].right;
}
}
cout<<"Case "<<t<<": "<<ans<<endl;
}
else cout<<"Case "<<t<<": -1"<<endl;
}
//cout << "Hello world!" << endl;
return 0;
}
/*题意:有一个坐标轴 在X轴上方是海 下方是陆地 X轴是海岸线,海上有N个小岛,现在要在海岸线上安装雷达,
雷达的覆盖范围是一个以R为半径的圆,请用最少的雷达覆盖所有的小岛;当无法覆盖时 输出-1
思路:算出 每个小岛能被覆盖的雷达的圆心,即以小岛为圆心 R为半径 作圆,该圆与X轴的交点:
左交点为x-sqrt(R*R-y*y); 右交点为x+sqrt(R*R-y*y);
令当前雷达在第一个岛的右交点
按照 左交点 排序,如果i点的左交点在 当前雷达的右边 则需安装一个新雷达,更新雷达
否则 如果 i点的右交点也在当前雷达的左边 则把当前雷达的圆心更新为该点的右交点;*/
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxx=1010;
struct node
{
double left,right;
}a[maxx];
bool cmp(node i,node j)
{
return i.left<j.left;
}
int main()
{
int n,d,t=0;
while (cin>>n>>d)
{
if (n==0&&d==0) break;else t++;
int x,y,flag=1;
for (int i=1;i<=n;i++)
{
cin>>x>>y;
if (y>d) flag=0;
a[i].left=x-sqrt(d*d-y*y);
a[i].right=x+sqrt(d*d-y*y);
}
if (flag)
{
sort(a+1,a+1+n,cmp);
int ans=1;
double radar;
radar=a[1].right;
for (int i=2;i<=n;i++)
{
if (a[i].right<radar) radar=a[i].right;
else if (a[i].left>radar)
{
ans++;
radar=a[i].right;
}
}
cout<<"Case "<<t<<": "<<ans<<endl;
}
else cout<<"Case "<<t<<": -1"<<endl;
}
//cout << "Hello world!" << endl;
return 0;
}
/*题意:有一个坐标轴 在X轴上方是海 下方是陆地 X轴是海岸线,海上有N个小岛,现在要在海岸线上安装雷达,
雷达的覆盖范围是一个以R为半径的圆,请用最少的雷达覆盖所有的小岛;当无法覆盖时 输出-1
思路:算出 每个小岛能被覆盖的雷达的圆心,即以小岛为圆心 R为半径 作圆,该圆与X轴的交点:
左交点为x-sqrt(R*R-y*y); 右交点为x+sqrt(R*R-y*y);
令当前雷达在第一个岛的右交点
按照 左交点 排序,如果i点的左交点在 当前雷达的右边 则需安装一个新雷达,更新雷达
否则 如果 i点的右交点也在当前雷达的左边 则把当前雷达的圆心更新为该点的右交点;*/
0 0
- POJ1328
- poj1328
- POJ1328
- poj1328
- POJ1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- poj1328
- POJ1328
- POJ1328
- POJ1328
- poj1328
- POJ1328
- 3ds43ssw
- poj 2533 Longest Ordered Subsequence dp
- ROS 学习系列 -- RViz中移动机器人来学习 URDF,TF,base_link, map,odom和odom 主题的关系
- Java基础第三讲
- errs2344213
- poj1328
- sksk732dsjkfh3t7826jea
- android 事件处理机制之requestDisallowInterceptTouchEvent
- jknkshiy786634
- wetsjk23748
- poj2586
- Linux下c++程序内存泄漏检测代码范例
- 4.17
- 有限状态机--纠正版