3104 Drying【贪心 二分】

题目地址:点击

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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值