Drying
Drying
https://ac.nowcoder.com/acm/problem/107701
//太恶心了,用cin过不去,换了scanf才过,调了一个多小时 //二分 #include<iostream> #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; int n; ll k; ll arr[100005]; bool pd(ll t)//判断当前时间是否可行 { ll m=t;//定义一个m代表t for(int i=1;i<=n;i++) { if(arr[i]>m) t-=ceil((arr[i]-m)/(k-1.0));//吹风机使时间不断减少 if(t<0) return false;//如果时间不够了,返回false } return true; } int main() { int i; ll ans,maxn=0; scanf("%d",&n); for(i=1;i<=n;i++) {scanf("%lld",&arr[i]);maxn=max(maxn,arr[i]);} scanf("%lld",&k); if(k==1)//k==1时特判,输出最大时间即可 { cout<<maxn<<endl; return 0; } //二分 ll l=1,r=maxn,mid;//右边界为时间最大值,全部都自然干 while(l<=r) { mid=(l+r)>>1; if(pd(mid)) {r=mid-1;ans=min(ans,mid);} else l=mid+1; } printf("%lld",ans); }