POJ(3104)(Drying)

链接:https://vjudge.net/problem/POJ-3104#author=169074291

思路:二分法求解,注意有几个细节,最好是将烘干机人工看完每分钟掉水1和额外的每分钟掉水k-1,这样方便后面的计算,还有就是k=0的情况需要单独拿出来讨论,特别注意判断的时候返回true ub = mid,不要形成惯性思维。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn = 1e5+1;
int n,k;
int a[maxn];

bool c(int d){
  unsigned long long int minute = 0;
    for(int i=0;i<n;i++){
    int more = a[i] - d;
        if(more>0){
            minute += (more+k-1)/k; //将可整除和不可整除两种情况合二为一
        }
        if(minute>d)return false;
    }
    return true;
}

bool cmp(int &a,int &b){
    return a>b;
}

int main(){
    while(scanf("%d",&n)!=EOF){
    for(int i=0;i<n;i++)
scanf("%d",&a[i]);

    scanf("%d",&k);

        k--; //分为自然掉水和额外的k-1掉水
        if(k==0){//k=0的情况需要单独讨论
            printf("%d\n",*max_element(a,a+n));
        }
        else{
    int lb = 0;
    int ub = *max_element(a,a+n);
    sort(a,a+n,cmp);
    while(ub-lb>1){
        int mid = (ub+lb)/2;
        if(c(mid))ub = mid;//一定注意true的时候到底是往哪边走
        else lb = mid;
    }
    printf("%d\n",ub);
    }
    }
        return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据结构算法大全(用 PASCAL 描述) 1.数论算法 求两数的最大公约数 function gcd(a,b:i...
    心想事成_ae7e阅读 3,511评论 0 0
  • 不知道会在哪一天,我会踏上征程。也不知道会在哪一天,我会踏上回家的路。前方的灯光闪耀着我的眼眸,带来一片昏黄的光晕...
    一缕清风送明月阅读 1,211评论 0 0
  • 一直坚持早晨打羽毛球 早晨6.30起床去球馆 可是冬天来了,天气越来越冷了,而且今天还下起了雨,雨中夹...
    59a9870b0ece阅读 1,373评论 0 1
  • 一、快速启动程序 启动程序的工具非常多,如Vstart、TypeAndRun、Launchy、ALTRun……层出...
    起今知行阅读 8,354评论 1 30
  • 优设dribbblebehancepinterestFWA[ANT DESIGN](https://ant.des...
    613桑阅读 1,558评论 0 0

友情链接更多精彩内容