关闭

1328

标签: POJACM
326人阅读 评论(0) 收藏 举报
分类:
#include<iostream>
#include<cmath>

using namespace std;

const int MAX = 1001;
const int X = 0;
const int Y = 1;

int N = 0;
int D = 0;

double getX(int d, int y);
void quick_sort(double array[MAX][2], int l, int r);

int main()
{

	freopen("input.txt", "r", stdin);
	setbuf(stdout, NULL);

	int test_case = 0;
	bool over = false;
	int answer = 0;

	while(true)
	{

		cin >> N >> D;
		if(N == 0 && D == 0)
		{
			break;
		}

		double Radius[MAX][2] = {0};

		test_case++;
		over = false;
		answer = 1;

		int x, y;
		for(int i = 0; i < N; i++)
		{
			cin >> x >> y;
			if(y > D)
			{
				over = true;
			}
			if(over != true)
			{
				double z = getX(D, y);
				Radius[i][X] = x - z;
				Radius[i][Y] = x + z;
			}
		}
		
		if(over == true)
		{
			cout << "Case " << test_case << ": " << -1 <<endl;
			continue;
		}
	
		quick_sort(Radius, 0, N - 1);

		double right = Radius[0][Y];

		for(int i = 1; i < N; i++)
		{
			if(Radius[i][X] > right)
			{
				answer++;
				right = Radius[i][Y];
			}
			else if(Radius[i][Y] < right)
			{
				right = Radius[i][Y];
			}
		}
		cout << "Case " << test_case << ": " << answer <<endl;
	}

	return 0;
}

double getX(int d, int y)
{
	return sqrt((double)(d * d * 1.0 - y * y * 1.0));
}
void quick_sort(double array[MAX][2], int l, int r)
{
	if(l < r)
	{
		int i = l;
		int j = r;
		double x = array[l][X];
		double y = array[l][Y];
		while(i < j)
		{
			while(i < j && array[j][X] > x)
				j--;
			if(i < j)
			{
				array[i][X] = array[j][X];
				array[i][Y] = array[j][Y];
				i++;
			}
			while(i < j && array[i][X] < x)
				i++;
			if(i < j)
			{
				array[j][X] = array[i][X];
				array[j][Y] = array[i][Y];
				j--;
			}
		}
		array[i][X] = x;
		array[i][Y] = y;
	
		quick_sort(array, l, i - 1);
		quick_sort(array, i + 1, r);
	}
}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

POJ 1328 Radar Installation-放置雷达(贪心,区间,二维转一维)

http://poj.org/problem?id=1328 这个题题意是说,海上有n多岛,在海岸线上(x轴)建一个雷达能覆盖到与它距离不超过d的岛,求覆盖所有岛的最小雷达数。 . . . . . . . . . 本题贪心思路是把点转化为在x轴坐标上的区间(即能保证覆盖该小...
  • ACM_10000h
  • ACM_10000h
  • 2014-11-11 11:44
  • 1458

(一般)POJ-1328 区间贪心,几何

题目大意:以x轴为分界,y>0部分为海,y 题目链接:点击打开链接 分析:这里首先说一下我一开始的思路(当然是错的),因为发现许多人一开始跟我的想法一致,所以在这里纠正这个错误。起先我是这么做的: 对于一个雷达放置点的y坐标,肯定是越往上越好,所以可以断定所以雷达都放置在x轴上(当...
  • AC_hell
  • AC_hell
  • 2016-04-26 15:49
  • 616

poj日记(1328)

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80210   Accepted: 1792...
  • luantai6098
  • luantai6098
  • 2017-12-04 10:22
  • 13

POJ 1328(贪心)

无意间发现了一篇poj的题目分类,里面例出了从入门到高级的题目分类....鼎鼎大名的poj分类很好很有层次感=。= 此题为贪心,题目大意是最少用多少个雷达可以覆盖所有的岛屿。雷达在同一条线上,如果存在雷达扫描不到的岛屿那么输出-1。 我们可以把每个岛屿看做一个圆,然后以雷达半径作为半径,记录下每...
  • zzycsx
  • zzycsx
  • 2015-10-07 20:51
  • 332

poj 1328 贪心经典

点击打开链接http://poj.org/problem?id=1328#include #include #include #include #define M 1110 using namespace std; int n; double r; typedef struct{ doub...
  • Jeremy1149
  • Jeremy1149
  • 2016-05-25 20:12
  • 152

KMP算法(uva 1328)

提问:假设存在一个长度为n的字符串T,模板是一个长度为m的字符串P,且m          匹配点即为:满足T[i]=P[0],T[i+1]=P[1],.........,T[i+m-1]=P[m-1]的点i;     ...
  • u014593244
  • u014593244
  • 2014-04-22 08:09
  • 561

POJ 1328 安装雷达

贪心:按区间右端点排序 岛屿对应放置雷达的区间 在区间的右端点放置雷达,若之后区间的左端点 1.<=上一个雷达,说明被覆盖,跳过 2.>上一个雷达,则在这个区间右端点放置雷达若某个区间左端点>上一个雷达,那么这个区间至少要有一个雷达, 故产生了安装雷达数目的下界,下界的可构造性由程序给出。#...
  • rsy56640
  • rsy56640
  • 2017-11-30 13:04
  • 41

poj 1328 贪心 转化

题目大意: 如图所示,x轴表示海岸线,x轴上方表示大海,下方表示陆地,有n(1 基本思路: 一开始是想让岛屿尽量落在雷达能测量的圆的边界上,尽量让雷达位置靠右,后来发现有些情况是无法满足的(至于什么情况请自行思考),根据第一个岛屿放雷达位置很明显要受到后边岛屿位置的影响,不仅仅...
  • bailuoheng
  • bailuoheng
  • 2017-05-13 22:48
  • 113

POJ 1328 解题报告

这道题看似无从下手,实际很简单,就是贪心的思路。所有小岛都在x轴上有个range,只有灯塔在这个range内才能覆盖到小岛。这个range就是求个直角形的边。然后按照range的左边界排序,逐一处理:如果灯塔的总range和当前小岛的range有重叠,则将这两个range取交集作为灯塔的总range...
  • thestoryofsnow
  • thestoryofsnow
  • 2014-12-03 13:06
  • 329

poj 1328 区间,贪心

Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea ...
  • winycg
  • winycg
  • 2017-02-05 19:31
  • 64
    个人资料
    • 访问:53724次
    • 积分:1521
    • 等级:
    • 排名:千里之外
    • 原创:97篇
    • 转载:0篇
    • 译文:0篇
    • 评论:15条
    我的微信公众号
      我的微信公众号
      欢迎大家关注我的微信公众号「林里少年」, 一个安卓手机软件开发的通信人,记录技术点滴,也是摄影爱好者!
    最新评论