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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++路标设置

發布時間:2024/8/1 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++路标设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

B市和T市之間有一條長長的高速公路,這條公路的某些地方設有路標,但是大家都感覺路標設得太少了,相鄰兩個路標之間往往隔著相當長的一段距離。為了便于研究這個問題,我們把公路上相鄰路標的最大距離定義為該公路的“空曠指數”。
現在政府決定在公路上增設一些路標,使得公路的“空曠指數”最小。他們請求你設計一個程序計算能達到的最小值是多少。請注意,公路的起點和終點保證已設有路標,公路的長度為整數,并且原有路標和新設路標都必須距起點整數個單位距離。

輸入格式:

第 1 行包括三個數 l (0<l≤1000,000,000), n (2≤n≤100,000), k,分別表示公路的長度,原有路標的數量,以及最多可增設的路標數量。

第 2 行包括遞增排列的 n 個整數,分別表示原有的 n 個路標的位置。路標的位置用距起點的距離表示,且一定位于區間 (0,l) 內。

輸出格式:

輸出1行,包含一個整數,表示增設路標后能達到的最小“空曠指數”值。

限制:

空間限制:128MByte

時間限制:1秒

樣例:

輸入:

100 2 1

25 60

輸出:

35

這一題的數值比較大,所以我們可以用二分。

設mid為空曠指數,計算出路標總數sum。

如果sum<=k,即路標數過多,就應該增加sum,也就是縮減mid,right=mid。

如果sum>k,即路標數過少,就應該縮減sum,即增加mid,left=mid+1

這里注意一下,while循環中的left不能等于right,否則會陷入死循環。

#include<iostream> #include<algorithm> using namespace std; long long l,k,n,a[100010],b[100010],sum,mid; void ef(int left,int right) {while(left<right) {sum=0;mid=(left+right)/2;for(int i=n; i>=0; i--) {sum+=(b[i]/mid);if(b[i]%mid==0) sum--;if(b[i]<mid) break;}if(sum<=k) right=mid;else if(sum>k) left=mid+1;}cout<<right; } int main() {cin>>l>>n>>k;for(int i=1; i<=n; i++) {cin>>a[i];b[i-1]=a[i]-a[i-1];}b[n]=l-a[n];sort(b,b+n+1);ef(0,l);return 0; }

總結

以上是生活随笔為你收集整理的C++路标设置的全部內容,希望文章能夠幫你解決所遇到的問題。

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