【luogu1325】雷达安装--贪心】的更多相关文章

题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内. 数据使用笛卡尔坐标系,定义海岸线为x轴.在x轴上方为海洋,下方为陆地. 样例1如图所示 输入格式 第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围. 接下来n行为岛屿坐标. 输出格式 一个整数表示最少需要的雷达数目,若不可能覆盖所有岛屿,输出“-1”.…
P1325 雷达安装 题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内. 数据使用笛卡尔坐标系,定义海岸线为x轴.在x轴上方为海洋,下方为陆地. 输入输出格式 输入格式: 第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围. 接下来n行为岛屿坐标. 输出格式: 一个整数表示最少需要的雷达数目,若不可能覆盖…
传送门 //p1325雷达安装 //很明显雷达应该安装在海岸线上 //而为了满足一个点被覆盖那在区间[x - sqrt(d ^ 2 - y ^ 2), x + sqrt(d ^ 2 - y ^ 2)]之中必有一个雷达 //现在就转换为一个区间覆盖问题:选尽量少的点使得每一个区间之内都有一个点 //把这些区间按右端点排序,记录last为上次雷达安装的点,若一个区间的左端点>last,那这个区间就不能被之前的点覆盖 //更新last=该区间的右端点(贪心选择,右端点有几率覆盖更多的区间),ans++…
题目描述 描述: 假设海岸线是一条无限延伸的直线.它的一侧是陆地,另一侧是海洋.每一座小岛是在海面上的一个点.雷达必须安装在陆地上(包括海岸线),并且每个雷达都有相同的扫描范围d.你的任务是建立尽量少的雷达站,使所有小岛都在扫描范围之内. 数据使用笛卡尔坐标系,定义海岸线为x轴.在x轴上方为海洋,下方为陆地. 样例1如图所示 输入输出格式 输入格式: 第一行包括2个整数n和d,n是岛屿数目,d是雷达扫描范围. 接下来n行为岛屿坐标. 输出格式: 一个整数表示最少需要的雷达数目,若不可能覆盖所有岛…
传送门 思路: 采取贪心的思想. 把每个岛屿看作圆心,以雷达的范围 d 为半径,求出与 x 轴的左右两个交点,两交点所夹的区间就需要放置一个雷达,这样就把这道题转换为了区间取点问题.在枚举岛屿时,记录之前最后一个雷达安放的位置 las ,如果岛屿在这个雷达的范围内,就跳过,否则,在该岛屿所在的区间右端点放一个雷达. 为了代码比较好看,我打了一个巨大的结构体. 主函数部分: int main() { n=T.resd();d=T.read(); ;i<=n;i++) { t[i].x=T.read…
题意:雷达如何放置?在xoy二维平面坐标系里面,x轴上方的为岛屿,x轴下方的是雷达要放到位置,如何放使得雷达放的最少? 思路 肯定放在x轴上减少浪费是最好的选择 什么情况下,雷达无法到达呢?--以这个岛屿为圆心,d为半径,如果这个圆与x轴没有交点的话,就是无法覆盖到---即y>d 现在就可以这么想了,每个岛屿都当成圆心C,然后都取画圆,跟x轴的交点例如交点A,B.如果雷达放到AB之间那就是可以将刚才C覆盖住了.--转为区间贪心问题 区间贪心问题: 先将各个区间的左端点按照从小到大排序 然后按递增…
题目链接 题意 在\(x\)轴上方有\(n\)个海岛,要在\(x\)轴建雷达,每个雷达的覆盖范围为半径为\(d\)的圆,问至少要建多少个雷达能覆盖所有海岛. 思路 对于每个海岛计算出雷达建立在什么范围(\(x\)轴上的一条线段)内能覆盖到它.排序并计算线段的交. Code #include <bits/stdc++.h> #define inf 0x3f3f3f3f #define maxn 200010 using namespace std; typedef long long LL; s…
题目 考虑对于一个小岛,如果有雷达可以覆盖它,则这些雷达肯定在一个区间里,则原题内容则变为区间选点问题 #include <bits/stdc++.h> using namespace std; int n, d, cnt; struct data { double l, r; }a[1001000]; bool cmp(data a, data b) { if (a.r == b.r) return a.l > b.l; return a.r < b.r; } map <i…
原题链接 经典贪心,转化为问题为,对于所有的区间,求最小的点数能使每个区间都至少有一个点. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> using namespace std; const int MAXN=100000+5; const double eps=0.00…
[SinGuLaRiTy-1024] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [POJ 2709] 颜料 (Painter) 题目描述 杂货店出售一种由N(3<=N<=12)种不同颜色的颜料,每种一瓶(50ML),组成的颜料套装.你现在需要使用这N种颜料:不但如此,你还需要一定数量的灰色颜料.杂货店从来不出售灰色颜料——也就是它不属于这N种之一.幸运的是,灰色颜料是比较好配置的,如果你取出三种不同颜色的颜料各x ml,混合起来就…