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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu4932 小贪心

發(fā)布時(shí)間:2025/6/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4932 小贪心 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
? ? ?給了一些處在x軸上的點(diǎn),要求我們用長(zhǎng)度相等的線段覆蓋所有點(diǎn),線段和線段之間不能重疊,問線段最長(zhǎng)可以使多長(zhǎng)。

思路:

? ? ? 一開始一直在想二分,哎!感覺這個(gè)題目很容易就往二分上去想,但是其實(shí)仔細(xì)想想并不是滿足單調(diào)性的(對(duì)于我的方法是不滿足單調(diào)性的,別的方法有可能可以),一開始想的是不能出現(xiàn)連續(xù)的兩個(gè)不滿足,這里的滿足就是可以有線段,各種wa,說下正確的思路吧,這個(gè)是中午才想出來的,這個(gè)題目我們可以貪心,首先要明白,最后的答案只有兩種情況,要么是某兩個(gè)相鄰點(diǎn)的距離,要么是某個(gè)相鄰點(diǎn)距離的一半,所以我們把所有可能都枚舉一半,判斷是否滿足的時(shí)候可以用貪心的想法,對(duì)于每一個(gè)點(diǎn),要么被左邊線段覆蓋,要么被右邊線段覆蓋,我們從左往右跑的話,那么就先判斷能不能被左邊覆蓋,不能的話在判斷能不能被右邊覆蓋,如果都不能那么當(dāng)前長(zhǎng)度就失敗了,至于判斷的細(xì)節(jié)很簡(jiǎn)單,自己想下,想不出來看下下面的代碼就知道了。


#include<stdio.h> #include<algorithm>#define N 51 using namespace std;double dis[N] ,num[N]; int mk[N];int ok(double now ,int n) {mk[1] = 1;for(int i = 2 ;i < n ;i ++){double disl = dis[i-1] ,disr = dis[i];if(mk[i-1] == 1 && now <= disl || mk[i-1] == 2 && (now == disl || now <= disl / 2))mk[i] = 1;else if(now <= disr) mk[i] = 2;else return 0;}return 1; }double maxx(double x ,double y) {return x > y ? x : y; }int main () {int n ,i ,t;scanf("%d" ,&t);while(t--){scanf("%d" ,&n);for(i = 1 ;i <= n ;i ++)scanf("%lf" ,&num[i]);sort(num + 1 ,num + n + 1);for(i = 2 ;i <= n ;i ++)dis[i-1] = num[i] - num[i-1];double ans = 0;for(i = 1 ;i < n ;i ++){if(ok(dis[i] ,n))ans = maxx(ans ,dis[i]);else if(ok(dis[i]/2 ,n))ans = maxx(ans,dis[i]/2);}printf("%.3lf\n" ,ans);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu4932 小贪心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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