生活随笔
收集整理的這篇文章主要介紹了
【贪心】雷达问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
張琪曼等人用時空雷達定位李旭琳所在的空間位置。如圖7.3所示,時空雷達裝在一條直線上,直線上方是空間海洋,每個人在空間海洋的位置就如同大海中的島嶼,這些人的位置已知,每一個雷達的掃描范圍是一個半徑為d的圓形區域,問最少需要多少個雷達覆蓋所有的人(島嶼)。
?
輸入
輸入包括多組測試數據,每組測試數據第一行為兩個整數n (1≤n≤1000) 和 d,即島嶼數和雷達掃描半徑。隨后n行每行兩個整數表示島嶼坐標。每組測試數據以空行間隔,所有測試數據以0 0結束。
?
輸出
輸出最少需要安裝雷達數,每組一行。若無解以-1表示。
?
樣例輸入
3 2
1 2
-3 1
2 1
1 2
0 2
0 0
樣例輸出
Case 1: 2
Case 2: 1
#include <iostream>
#include <
string>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <map>
#define range(i,a,b) for(int i=a;i<=b;++i)
#define LL long long
#define rerange(i,a,b) for(int i=a;i>=b;--i)
#define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
using namespace std;
pair<
double,
double>aa[
115];
int n,d;
void init(){}
void swap(
int&a,
int&
b){int tmp=
a;a=
b;b=
tmp;
}
bool cmp(pair<
double,
double>a,pair<
double,
double>
b){return a.second<
b.second;
}
void solve(){int cas=
0;while(cin>>n>>
d,n,d){bool flag=
true;double x,y;range(i,0,n-
1){cin>>x>>
y;if(!flag)
continue;if(y>
d){flag=
false;continue;}aa[i].first=(x-sqrt(d*d-y*
y));aa[i].second=(x+sqrt(d*d-y*
y));}cout<<
"Case "<<++cas<<
": ";if(!
flag){cout<<-
1<<
endl;continue;}sort(aa,aa+
n,cmp);double tmp=-
123845;
int ans=
0;range(i,0,n-
1)
if(tmp<
aa[i].first){++ans;tmp=
aa[i].second;}cout<<ans<<
endl;}
}
int main() {init();solve();return 0;
} View Code ?
轉載于:https://www.cnblogs.com/Rhythm-/p/9344574.html
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的【贪心】雷达问题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。