nyoj 710 外星人的供给站【贪心区间选点】

  

外星人的供给站

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

外星人指的是地球以外的智慧生命。外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识。比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体。

42岁的天文学家Dr. Kong已经执著地观测ZDM-777星球十多年了,这个被称为“战神”的红色星球让他如此着迷。在过去的十多年中,他经常有一些令人激动的发现。ZDM-777星球表面有着明显的明暗变化,对这些明暗区域,Dr. Kong已经细致地研究了很多年,并且绘制出了较为详尽的地图。他坚信那些暗区是陆地,而亮区则是湖泊和海洋。他一直坚信有水的地方,一定有生命的痕迹。Dr. Kong有一种强烈的预感,觉得今天将会成为他一生中最值得纪念的日子。
    这天晚上的观测条件实在是空前的好,ZDM-777星球也十分明亮,在射电望远镜中呈现出一个清晰的暗红色圆斑。还是那些熟悉的明暗区域和极冠,不过,等等,Dr. Kong似乎又扑捉到曾看到过的东西,那是什么,若隐若现的。他尽可能地睁大了眼睛,仔细地辨认。哦,没错,在一条直线上,又出现了若干个极光点连接着星球亮区,几分钟后,极光点消失。

Dr. Kong大胆猜想,ZDM-777星球上的湖泊和海洋里一定有生物。那些极光点就是ZDM-777星球上的供给站,定期给这些生物提出维持生命的供给。

不妨设,那条直线为X轴,极光点就处在X轴上,N个亮区P1,P2,…Pn就分布在若干个极光点周围。

接着,Dr. Kong 又有惊人的发现,所有的亮区Pi都处在某个半径为R的极光点圆内。去掉一个极光点就会有某些亮区Pj不处在覆盖区域内。

Dr. Kong想知道,至少需要多少个极光点才能覆盖所有的湖泊和海洋。

输入
第一行: K 表示有多少组测试数据。 
接下来对每组测试数据:
第1行: N R
第2~N+1行: PXi PYi (i=1,…..,N)

【约束条件】
2≤K≤5 1≤R≤50 1≤N≤100 -100≤PXi PYi≤100 | PYi | ≤ R 
R, PXi PYi都是整数。数据之间有一个空格。

输出
对于每组测试数据,输出一行: 最少需要的极光点数。
样例输入
2
3 2
1 2
-3 1
2 1
1 5
5 5
样例输出
2
1
#include<stdio.h>
#include<algorithm>
#include<math.h>
#define MAX 1100
using namespace std;
struct node
{
	double beg;
	double end;
}s[MAX];
bool cmp(node a,node b)
{
	return a.end<b.end;
}
int main()
{
	int t,n,r,i;
	double a,b;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&r);
		for(i=0;i<n;i++)
		{
			scanf("%lf%lf",&a,&b);
			s[i].beg=a-sqrt(r*r-b*b);
			s[i].end=a+sqrt(r*r-b*b);
		}
		sort(s,s+n,cmp);
		int sum=0;
		double ans=-10000;
		for(i=0;i<n;i++)
		{
			if(ans<s[i].beg)
			{
				sum++;
				ans=s[i].end;
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}

  

时间: 2024-05-28 17:23:57

nyoj 710 外星人的供给站【贪心区间选点】的相关文章

nyoj 710 外星人的供给站

外星人的供给站 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识.比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体. 42岁的天文学家Dr. Kong已经执著地观测ZDM-777星球十多年了,这个被称为"战神"的红色星球让他如此着迷.在过去的十多年中,他经常有一些令人激动的发现.ZDM-777星

NYOJ 题目710 外星人的供给站(贪心区间覆盖)

外星人的供给站 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识.比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体. 42岁的天文学家Dr. Kong已经执著地观测ZDM-777星球十多年了,这个被称为"战神"的红色星球让他如此着迷.在过去的十多年中,他经常有一些令人激动的发现.ZDM-777星

NYOJ710 外星人的供给站 【贪心】

外星人的供给站 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识.比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体. 42岁的天文学家Dr. Kong已经执著地观测ZDM-777星球十多年了,这个被称为"战神"的红色星球让他如此着迷.在过去的十多年中,他经常有一些令人激动的发现.ZDM-777星

外星人的供给站(贪心)

为了照到点Point(x0,y0),圆心可以在一个范围内移动,我们设该范围为(x,y)(Vec[i].x,Vec[i].y)表示第如果圆心在这个范围内,则第i个点就一定能照到,sum表示为了能照到前i个点,最靠近右边的圆的边界坐标. #define LOCAL #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> int const MAX_N=101; typedef

河南省第六届大学生程序设计竞赛--外星人的供给站

外星人的供给站 Time Limit: 2 Seconds    Memory Limit: 512 MB Description 外星人指的是地球以外的智慧生命.外星人长的是不是与地球上的人一样并不重要,但起码应该符合我们目前对生命基本形式的认识.比如,我们所知的任何生命都离不开液态水,并且都是基于化学元素碳(C)的有机分子组合成的复杂有机体. 42岁的天文学家Dr. Kong已经执著地观测ZDM-777星球十多年了,这个被称为"战神"的红色星球让他如此着迷.在过去的十多年中,他经常

poj1328Radar Installation(贪心—区间选点)

题目链接: 啊哈哈,点我点我 题目: Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52037   Accepted: 11682 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small isl

POJ 1328 Radar Installation 【贪心 区间选点】

解题思路:给出n个岛屿,n个岛屿的坐标分别为(a1,b1),(a2,b2)-----(an,bn),雷达的覆盖半径为r 求所有的岛屿都被覆盖所需要的最少的雷达数目. 首先将岛屿坐标进行处理,因为雷达的位置在x轴上,所以我们设雷达的坐标为(x,0),对于任意一个岛屿p(a,b),因为岛屿要满足在雷达的覆盖范围内,所以 (x-a)^2+b^2=r^2,解得 xmin=a-sqrt(r*r-b*b);//即为区间的左端点 xmax=a+sqrt(r*r-b*b);//即为区间的右端点 接下来区间选点即

UVa1615 Highway (贪心,区间选点)

链接:http://bak.vjudge.net/problem/UVA-1615 分析:以村庄为圆心,D为半径作圆,可选区间就是高速公路在圆内的部分(包括两个交点),按区间右端点从小到大,如若右端点相同再按左端点从大到小排好序,接下来就是很纯粹的区间选点问题. 1 #include <cstdio> 2 #include <algorithm> 3 #include <cmath> 4 using namespace std; 5 6 const int maxn =

nyoj 12 喷水装置(二) 贪心 区间覆盖

思路很简单 根据坐标和半径 得到每个喷水设置能够覆盖的左右坐标 然后按左坐标从小到大排序 筛选时候如果喷水设置的左坐标小于等于起始点star用while循环寻找能够覆盖最大的右坐标 然后更新起始点star为寻找到的最大右坐标 具体看代码: #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; struct node { double left,right; }c[10