采用二分验证的方式,
验证:先假设没有烘***,那么t分钟过后每件衣服就消耗了t个水分。这时候在使用烘***的话就水每分钟消耗n-1个水分,那么每一件衣服还需要使用多少次烘***就可以计算出来。
然后一共可以使用t次烘***,进行比较即可得到。要注意在计算过程中次数可能超出int的范围,需要开long long。
//采用二分验证的方式, //验证:已知时间,散热器的K,那么就可以算出最大能烘干最大的水分。通过最大水分就可以判断是当前的答案合不合理 #include <bits/stdc++.h> typedef long long ll; using namespace std; const int maxn = 1e5+10; int n, k; int a[maxn]; bool yanz(int x) { int b[maxn]; memcpy(b, a, sizeof(a)); ll ci = 0; for (int i=0;i<n;i++) { b[i] -= x; if (b[i]>0) { ci += ceil((double)b[i]/(k-1)); } } return ci<=x; } int main() { scanf("%d", &n); int maxval = INT_MIN; for (int i=0;i<n;i++) { scanf("%d", &a[i]); if (maxval<a[i]) maxval = a[i]; } scanf("%d", &k); if (k<=1) { cout<<maxval; return 0; } int l = 1, r = 1e9+10; while (l<r) { // cout<<l<<" "<<r<<endl; int mid = (l+r)/2; if (yanz(mid)) r = mid; else l = mid+1; } // cout<<yanz(1)<<endl; printf("%d", l); }