題目:
題意:在x軸上某些位置裝雷達,問怎麼才能使海島p被訊號覆蓋,有n個海島,雷達覆蓋範圍是d。
分析:考慮乙個海島p,對於覆蓋它的雷達放的最優的位置是它在圓圈的邊緣上,因為這樣這個雷達就可以覆蓋更多其他的海島。那麼先按x排序,對於當前的乙個圈,看看是否下乙個海島是否可以在圈內,如果可以就在看下乙個,不可以就放乙個最新的雷達,接下來在比較後面的海盜是否可以放到這個圈內。
需要注意一種情況,就是對於第i個海島放的雷達不可以覆蓋第i+1個海島,而第i+1個海島放的雷達可以覆蓋第i個海島的情況,這種情況,雷達要放在可以覆蓋第i+1個海島的那個位置了。
#include#include#include#include#includeusing namespace std;const int n=1009;
int d,n;
struct point
;point p[n];
bool cmp(const point& a,const point& b)
if(flag)
sort(p,p+n,cmp);
double x=getx(p[0]);
int ans=1;
for(int i=1;itmp)
if(p[i].y*p[i].y+(p[i].x-x)*(p[i].x-x)<=d*d)continue;
//if(p[i].y*p[i].y+(p[i].x-x)*(p[i].x-x)<=d*d)continue;
x = getx(p[i]);
ans++;
}printf("case %d: %d\n",++cas,ans);
}return 0;
}
poj 1328 貪心(建立雷達覆蓋小島)
題意 x軸上方有若干小島,用座標 x,y 給出。現要在x軸上建立若干雷達,雷達的半徑 r 全部相同,且由輸入給定。問為了覆蓋全部小島,最少需要建立多少雷達?思路 對每個小島座標,求出需要覆蓋它的雷達的x座標範圍,可以得到一系列區間。問題變成每個區間裡至少選一點,問最少的選點數量。將所有區間按照右側大...
POJ1328貪心放雷達
題意 有乙個二維座標,y 0是海,y 0是陸地,然後只能在y 0的岸邊上放雷達,有n個城市需要被監控,問最少放多少個雷達。思路 貪心去做就行了,其實題目不難但是這個題目過的並不怎麼順利,哎!一開始我的想法是按照x排序,然後從左往右乙個乙個放置雷達,第乙個放在第乙個點相切的右側,結果果斷wa了,然後就...
安裝雷達POJ 1328(貪心)
翻譯過來就是 解題思路 把這個二維的問題轉化為轉化為一維的問題。如上圖所示,只需要雷達安裝在這個區間中的話,雷達就能夠覆蓋到上面的島嶼。現在這個問題又變成區間排程問題了。但是還有乙個問題就是在這個區間中說明位置上放置雷達呢?這個區間可是有無數個點,列舉肯定不可能。解決方向如下 說實話作為乙個小白而言...