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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

sicily 1137 河床 (二分分治)

發布時間:2025/7/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sicily 1137 河床 (二分分治) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  《計算機算法設計與分析》啃書中。。。

   有點看不進書,就來刷個水題吧,剛開始看錯題了還。

   注意:是所有測量點相差均不大于di而不是相鄰兩點。。。

?

1 //1137.河床 2 #include <iostream> 3 using namespace std; 4 5 int max_length(int d[], int l, int r, int m) { 6 //計算最大長度并返回 7 //d為保存高度的數組 8 //l為下標左界 9 //r為下標右界 10 //m為最大高度差 11 if (l==r) return 1; 12 if (l==r-1) { 13 if ((d[l]-d[r]<=m)&&(d[l]-d[r]>=-m)) return 2; 14 else return 1; 15 } 16 //二分 17 int mid = (l+r)/2; 18 int lm = max_length(d,l,mid,m); 19 int rm = max_length(d,mid+1,r,m); 20 int mm = 1; 21 int min , max; 22 min = max = d[mid]; 23 for (int i = mid-1; i >= l; i--) { 24 if ((d[i]>=max-m)&&(d[i]<=min+m)) { 25 ++mm; 26 if (d[i]<min) min = d[i]; 27 else if (d[i]>max) max = d[i]; 28 } 29 else break; 30 } 31 for (int i = mid+1; i <= r; i++) { 32 if ((d[i]>=max-m)&&(d[i]<=min+m)) { 33 ++mm; 34 if (d[i]<min) min = d[i]; 35 else if (d[i]>max) max = d[i]; 36 } 37 else break; 38 } 39 //返回最大值 40 return (lm>rm?lm:rm)>mm?(lm>rm?lm:rm):mm; 41 } 42 43 int main() { 44 int n, m; 45 cin>>n>>m; 46 int d[n]; 47 for (int i = 0; i < n; i++) cin>>d[i]; 48 cout<<max_length(d,0,n-1,m)<<endl; 49 return 0; 50 }

?

  也不知道我是不是寫的有點麻煩。。。

轉載于:https://www.cnblogs.com/zmj97/p/5431888.html

總結

以上是生活随笔為你收集整理的sicily 1137 河床 (二分分治)的全部內容,希望文章能夠幫你解決所遇到的問題。

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