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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ny12 喷水装置(二)

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

噴水裝置(二)

時間限制:3000 ms ?|? 內存限制:65535 KB 難度:4 描述
有一塊草坪,橫向長w,縱向長為h,在它的橫向中心線上不同位置處裝有n(n<=10000)個點狀的噴水裝置,每個噴水裝置i噴水的效果是讓以它為中心半徑為Ri的圓都被潤濕。請在給出的噴水裝置中選擇盡量少的噴水裝置,把整個草坪全部潤濕。
輸入
第一行輸入一個正整數N表示共有n次測試數據。
每一組測試數據的第一行有三個整數n,w,h,n表示共有n個噴水裝置,w表示草坪的橫向長度,h表示草坪的縱向長度。
隨后的n行,都有兩個整數xi和ri,xi表示第i個噴水裝置的的橫坐標(最左邊為0),ri表示該噴水裝置能覆蓋的圓的半徑。
輸出
每組測試數據輸出一個正整數,表示共需要多少個噴水裝置,每個輸出單獨占一行。
如果不存在一種能夠把整個草坪濕潤的方案,請輸出0。
樣例輸入
2 2 8 6 1 1 4 5 2 10 6 4 5 6 5
講解:屬于貪心最優解問題
代碼 #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++;//重新統計數組的組數 } }sort(c,c+k,cmp);//快排,防止超時 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

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。