题目地址:点击
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int water[100005];
bool judge(int n,int k,int time){
int sum=0; //记录烘干机的使用时间,如果此时间大于要求时间,则衣服没有全干
for(int i=0;i<n;i++){
if(water[i]>time){ //如果不能自然干
sum+=ceil((water[i]-time)*1.0/(k-1)); //只对高于规定时间的部分烘干并向上取整,由于自然烘干系数1,则烘干机效率为k-1
// sum+=(water[i]-time+k-2)/(k-1); //和上一句一样
}
if(sum>time) //衣服未全干
return 0;
}
return 1;
}
int main(){
int n,k;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&water[i]);
}
cin>>k;
sort(water,water+n);
int left=1,right=water[n-1];
if(k==1){
cout<<right;
}else{
while(left<=right){
int mid=(left+right)/2;
if(judge(n,k,mid)){
right=mid-1;
}
else{
left=mid+1;
}
}
cout<<left;
}
return 0;
}
超时代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int cloth[100005];
int main(){
int n,heat;
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&cloth[i]);
cin>>heat;
sort(cloth,cloth+n);
int t=0;
while(cloth[n-1]>0){
cloth[n-1]-=heat;
for(int i=0;i<n-1;i++)
cloth[i]--;
sort(cloth,cloth+n);
t++;
}
cout<<t;
return 0;
}