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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ 3104 Drying【二分搜索】最大化最小值问题

發布時間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3104 Drying【二分搜索】最大化最小值问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?題意

有N件衣服,每件衣服的函數量為ai,每分鐘可以自然脫水1單位;有一個脫水機,每次只能用于一件衣服,每分鐘脫水K單位,脫水時,不自然風干,求所有衣服全部脫水的最短時間

分析

二分查找最短時間,下界為1,上界為N件衣服中最大含水量,全部脫水的最小時間mid

  • 對于每一件衣服,若ai小于等于mid,則讓其自然風干
  • 若ai大于mid,則采用脫水機[X1]分鐘+自然風干[X2]分鐘的方法,那么mid=X1+X2,ai<=x1*k+x2,即x1>=(ai-mid)/(k-1)
  • (ai-mid)/(k-1)向上取整就是這件衣服脫水的最短時間
  • #include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<cstdio> #include<string> #include<math.h> #include<algorithm> #include<map> #include<set> #include<stack> #define mod 998244353 #define INF 0x3f3f3f3f #define eps 1e-6 using namespace std; typedef long long ll; using namespace std; const int maxn=1e5+10; ll a[maxn]; ll k; int n; bool check(ll mid){ll sum=0;for(int i=1;i<=n;i++){if(a[i]>mid)sum+=(ll)ceil(1.0*(a[i]-mid)/(k-1));}return sum>mid; } int main(){while(scanf("%d",&n)!=EOF){ll MAX=-1;for(int i=1;i<=n;i++){scanf("%lld",&a[i]);MAX=max(MAX,a[i]);}scanf("%lld",&k);if(k==1){printf("%lld\n",MAX);continue;}ll right=MAX,left=1;while(left<=right){ll mid=(left+right)>>1;if(check(mid))left=mid+1;elseright=mid-1;}printf("%lld\n",left);}return 0; } /* 3 2 3 9 5 3 2 3 6 5 */

    ?

    總結

    以上是生活随笔為你收集整理的POJ 3104 Drying【二分搜索】最大化最小值问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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