POJ-3104 Drying(二分
阿新 • • 發佈:2018-12-09
題目連結:http://poj.org/problem?id=3104
題意:你有n件衣服需要烘乾,每件衣服給出溼度。你現在有一個烘乾機,每次可以烘乾k點溼度,求輸出烘乾所有衣服所需最少的時間。
思路:二分最少時間,如果當前衣服大於時間,我們考慮使用烘乾機,求出所有衣服烘乾所需時間,如果<=mid 我們儲存mid,繼續往更少的時間二分即可
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; constView Codeint maxn = 100005; ll a[maxn]; int main() { int n; while(~scanf("%d",&n)) { ll Max=0; for(int i=1; i<=n; i++) { scanf("%lld",&a[i]); Max=a[i]>Max?a[i]:Max; } ll k; scanf("%lld",&k); if(k==1) { printf("%d\n",Max); continue; } ll l=1; ll r=Max; ll ans=0; while(l<=r) { ll mid=(l+r)>>1; ll sum=0; for(int i=1; i<=n; i++) { if(a[i]>mid) { ll xx=ceil((a[i]-mid)*1.0/(k-1)); sum+=xx; } } if(sum<=mid) { ans=mid; r=mid-1; } else l=mid+1; } cout<<ans<<endl; } }
PS:摸魚怪的部落格分享,歡迎感謝各路大牛的指點~