poj1328 Radar Installation 【贪心】

题意:

有n个小岛,在x轴上方, 有一种雷达,覆盖范围为d,现在你可以在x轴以及x轴下方建立雷达,请问最少建立多个雷达可以覆盖所有的小岛

题解:

这是一道很经典的贪心入门题目, 从看到题意我们就知道 雷达建在x轴上是最优的,那么应该如何对这些小岛进行处理呢, 我们可以将每一个小岛的坐标信息来推出要覆盖到这个小岛的雷达, 要建在x轴上的哪些位置上,也就是一段区间,所以我们可以运用勾股定理,求出区间, 再对其进行排序,然后遍历一遍,贪心取最少的个数。做法如下:

AC_code:

/*
Algorithm: 贪心 
Author: anthony1314
Creat Time:
Time Complexity:
*/

#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<cstring>
#include<cstdio>
#include<cmath> 
//#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
#define mod 1e9 + 7
#define line printf("--------------");
using namespace std;
struct ff {
	double x, y;
} nn[1005];
struct node {
	double fir, end;
} kk[1005];
bool cmp(node aa, node bb) {
	if(aa.end == bb.end) {
		return aa.fir > bb.fir;
	}
	return aa.end < bb.end;
}
int n, d;
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int caaa = 1;
	while(~scanf("%d %d", &n, &d)) {
		if(n == 0 && d == 0){
			break;
		}
		for(int i = 1; i <= n; i++) {
			double a, b;
			cin>>a>>b;
			nn[i].x= a;
			nn[i].y =b;
		}
		bool flag = true;
		for(int i = 1; i <= n; i++) {
			if(nn[i].y > d) {
				flag = false;
				break;
			}
			double a = nn[i].x;
			double b = nn[i].y;
			kk[i].fir = a - sqrt(d*d - b*b);
			kk[i].end = a + sqrt(d*d - b*b);
		}
		int ans = 1;
		if(!flag) {
			ans = -1;
		} else {
			sort(kk+1, kk + n+1, cmp);
			node tmp = kk[1];
			for(int i = 2; i <= n; i++) {
				if(kk[i].fir > tmp.end) {
					tmp = kk[i];
					ans++;
				} else if(kk[i].end < tmp.end) {
					tmp = kk[i];
				}
			}
		}
		cout<<"Case "<<caaa<<": "<<ans<<endl;
		caaa++;

	}


	return 0;
}

 

全部评论

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务