【贪心】雷达装置(ybtoj 贪心-1-2)
生活随笔
收集整理的這篇文章主要介紹了
【贪心】雷达装置(ybtoj 贪心-1-2)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
雷達(dá)裝置
ybtoj 貪心-1-2
題目大意
在平面直角坐標(biāo)系中有n個點,現(xiàn)在讓你在x軸上布置雷達(dá),雷達(dá)可以的偵查半徑為d,問你最少布置多少個雷達(dá)
輸入樣例
3 2 1 2 -3 1 2 1輸出樣例
2數(shù)據(jù)范圍
1?n?1031\leqslant n \leqslant 10^31?n?103
解題思路
首先通過勾股定理求出偵查該點的雷達(dá)x坐標(biāo)范圍
然后按范圍的右端坐標(biāo)排序
第一個雷達(dá)放在第一個點的右端坐標(biāo)
然后每次判斷上一個點是否在范圍內(nèi)
如果不在就再建一個
代碼
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long #define abs(y) (y>0?y:-y) using namespace std; int n, ans; double d, x, y, g; struct node {double l, r; }a[1010]; bool cmp(node a, node b) {return a.r < b.r; } int main() {scanf("%d%lf", &n, &d);for (int i = 1; i <= n; ++i){scanf("%lf%lf", &x, &y);if (abs(y) > d)//無法達(dá)到{printf("-1");return 0;}a[i].l = x - sqrt((d * d - y * y));//左右端a[i].r = x + sqrt((d * d - y * y));}sort(a+1,a+1+n,cmp);ans = 1;g = a[1].r;//范圍的右端for (int i = 2; i <= n; ++i)if (a[i].l > g) g = a[i].r, ans++;printf("%d", ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的【贪心】雷达装置(ybtoj 贪心-1-2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绥远是现在的什么地方 历史上的绥远绥远是
- 下一篇: 【贪心】畜栏预定(ybtoj 贪心-1-