日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【贪心】Radar Installation(poj 1328)

發(fā)布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【贪心】Radar Installation(poj 1328) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Radar Installation

poj 1328

題目大意:

在平面直角坐標(biāo)系的一二象限上有n個小島,現(xiàn)在讓你在x坐標(biāo)上布置雷達(dá),每個雷達(dá)可以偵測以它為原心,半徑為m的圓內(nèi)的所有小島,現(xiàn)在問偵測完這n個小島最少要多少個雷達(dá)

輸入樣例

3 2 1 2 -3 1 2 11 2 0 20 0

輸出樣例

Case 1: 2 Case 2: 1

數(shù)據(jù)范圍

1?n?10001\leqslant n\leqslant 10001?n?1000

解題思路:

把每個點(diǎn)可以被哪個范圍內(nèi)雷達(dá)偵測到記錄下來,然后按范圍的最尾端從小到大排序,然后每一次在需要安裝雷達(dá)的范圍的最右端安裝雷達(dá),這樣可以讓更多的點(diǎn)被偵測到

代碼:

#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,t,pp,ans; double x,y,m,k; struct rec {double bg,ed; }a[1500]; bool cmp(rec x,rec y){return x.ed<y.ed||x.ed==y.ed&&x.bg<=y.bg;} int main() {scanf("%d %lf",&n,&m);while(n){++t;pp=0;for (int i=1;i<=n;++i){scanf("%lf %lf",&x,&y);if (y>m) pp=1;a[i].bg=x-sqrt(m*m-y*y);//計算范圍a[i].ed=x+sqrt(m*m-y*y);}if (pp)//離x軸的坐標(biāo)大于m則無解{printf("Case %d: -1\n",t);scanf("%d %lf",&n,&m);continue;}sort(a+1,a+1+n,cmp);//排序ans=1;k=a[1].ed;//最后面的雷達(dá)for (int i=2;i<=n;++i)if (a[i].bg>k)//沒有被偵測到ans++,k=a[i].ed;//新建一個printf("Case %d: %d\n",t,ans);scanf("%d %lf",&n,&m);} }

總結(jié)

以上是生活随笔為你收集整理的【贪心】Radar Installation(poj 1328)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。