poj3104 Drying---二分
题目链接:https://vjudge.net/problem/POJ-3104
题意:每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分。只有1台烘干机,每台烘干机同时只能烘干1件衣服,烘干N件衣服最少需要多长时间?
有点麻烦的是水分的自然流失,所以如果能先得出时间就好了;又因为时间长更有可能全部烘干(单调性),所以考虑二分答案。对于二分的m,判断能不能让全部衣服干。如果ai<=m,那么只要让水分自然流失就行,所以只要对ai>m的情况用烘干器。考虑对于每个ai需要烘干的时间t,则有 k*t+(m-t)>=ai,即t>=(ai-m)/(k-1),向上取整。如果m小于额外时间的和,则不能全部烘干,check返回false。对于k=1的情况要特判一下
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e5+10;
int t,n,i,j,k,l,r;
int a[maxn];
bool check(int m){
int time=m;
for (int i=1;i<=n;i++){
if (a[i]<=m) continue;
int t=(a[i]-m)/(k-1); //*
if ((a[i]-m)%(k-1)!=0) t++;
time-=t;
if (time<0) return false;
}
return true;
}
int main(){
while (~scanf("%d",&n)){
int tmax=0;
for (i=1;i<=n;i++) {
scanf("%d",&a[i]);tmax=max(tmax,a[i]);
}
scanf("%d",&k);
if (k==1){ //*
printf("%d\n",tmax);continue;
}
l=0;r=1e9;
while (r-l>1){
int m=(l+r)/2;
if (check(m)) r=m;else l=m;
}
printf("%d\n",r);
}
return 0;
}

浙公网安备 33010602011771号