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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ny12 喷水装置(二)

發(fā)布時(shí)間:2023/11/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ny12 喷水装置(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

噴水裝置(二)

時(shí)間限制:3000 ms ?|? 內(nèi)存限制:65535 KB 難度:4 描述
有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n(n<=10000)個(gè)點(diǎn)狀的噴水裝置,每個(gè)噴水裝置i噴水的效果是讓以它為中心半徑為Ri的圓都被潤濕。請(qǐng)?jiān)诮o出的噴水裝置中選擇盡量少的噴水裝置,把整個(gè)草坪全部潤濕。
輸入
第一行輸入一個(gè)正整數(shù)N表示共有n次測試數(shù)據(jù)。
每一組測試數(shù)據(jù)的第一行有三個(gè)整數(shù)n,w,h,n表示共有n個(gè)噴水裝置,w表示草坪的橫向長度,h表示草坪的縱向長度。
隨后的n行,都有兩個(gè)整數(shù)xi和ri,xi表示第i個(gè)噴水裝置的的橫坐標(biāo)(最左邊為0),ri表示該噴水裝置能覆蓋的圓的半徑。
輸出
每組測試數(shù)據(jù)輸出一個(gè)正整數(shù),表示共需要多少個(gè)噴水裝置,每個(gè)輸出單獨(dú)占一行。
如果不存在一種能夠把整個(gè)草坪濕潤的方案,請(qǐng)輸出0。
樣例輸入
2 2 8 6 1 1 4 5 2 10 6 4 5 6 5
講解:屬于貪心最優(yōu)解問題
代碼 #include<algorithm> #include<iostream> #include<cstdio> #include<cmath> using namespace std; struct T { int a,b; }c[10010]; int cmp(T n,T m) { if(n.a<m.a) return 1; if(n.a==m.a && n.b>m.b) return 1; return 0; } int main() { int i,m,n,k=0; int w,h,x,r; scanf("%d",&m); while(m--) {int k=0; int max=-1; scanf("%d %d %d",&n,&w,&h); for(i=0;i<n;i++) { scanf("%d %d",&x,&r); if(2*r>h)//去掉不滿足條件的, { c[k].a=x-sqrt(r*r-h*h/4); if(c[k].a<0) c[k].a=0; c[k].b=sqrt(r*r-h*h/4)+x; if(c[k].b>w) c[k].b=w; if(c[k].b>max) max=c[k].b; k++;//重新統(tǒng)計(jì)數(shù)組的組數(shù) } }sort(c,c+k,cmp);//快排,防止超時(shí) if(c[0].a!=0 || max!=w) printf("0\n"); else { int count=0; int f=0; int start=0,last=0; while(start!=w) { for(i=f; i<k; i++) if(c[i].a<=start && c[i].b>last) { last=c[i].b; f=i+1; } if(last==start)//這種情況也無解 { count=0; break; } start=last;//從新定義邊界 count++; } cout<<count<<endl; } } return 0; } View Code

?

總結(jié)

以上是生活随笔為你收集整理的ny12 喷水装置(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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