zoukankan      html  css  js  c++  java
  • Divide and conquer:Drying(POJ 3104)

                     

                     烘干衣服

      题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服?

      简单来说题目就是要:时间允许的情况下让时间最小,时间可以无限大,这题就是“最小化最大值”,二分法

      

     1 #include <iostream>
     2 #include <functional>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 static int clothes[100005];
     8 
     9 void Search(const int, const int);
    10 bool judge(const long long, const int, const int);
    11 int fcmop(const void *a, const void *b)
    12 {
    13     return *(int *)a - *(int *)b;
    14 }
    15 
    16 int main(void)//在时间允许的情况下让值最小(最小化最大值)
    17 {
    18     int sum_clothes, re;
    19 
    20     while (~scanf("%d", &sum_clothes))
    21     {
    22         for (int i = 0; i < sum_clothes; i++)
    23             scanf("%d", &clothes[i]);
    24         scanf("%d", &re);
    25         qsort(clothes, sum_clothes, sizeof(int), fcmop);
    26         if (re == 1)
    27             printf("%d
    ", clothes[sum_clothes - 1]);//注意一定不要出现0的情况
    28         else
    29             Search(sum_clothes, re);
    30     }
    31     return 0; 
    32 }
    33 
    34 void Search(const int sum_clothes, const int re)
    35 {
    36     long long lb = 0, rb = (long long)10e+9 + 1, mid;
    37 
    38     while (rb - lb > 1)
    39     {
    40         mid = (rb + lb) / 2;
    41         if (judge(mid, sum_clothes, re)) rb = mid;
    42         else lb = mid;
    43     }
    44     printf("%lld
    ", rb);
    45 }
    46 
    47 bool judge(const long long times, const int sum_clothes, const int re)
    48 {
    49     long long use_time_now, use_sum = 0;
    50     int i;
    51 
    52     for (i = 0; i < sum_clothes && clothes[i] <= times; i++);
    53 
    54     for (; i < sum_clothes; i++)
    55     {
    56         use_time_now = (clothes[i] - times + re - 1 - 1) / (re - 1);//向上取整,要先-1
    57         use_sum += use_time_now;
    58         if (use_sum > times)
    59             return false;
    60     }
    61     return true;
    62 }
  • 相关阅读:
    [LeetCode] 286. Walls and Gates 墙和门
    [LeetCode] Sparse Matrix Multiplication 稀疏矩阵相乘
    [LeetCode] 314. Binary Tree Vertical Order Traversal 二叉树的竖直遍历
    [LeetCode] 337. House Robber III 打家劫舍之三
    [LeetCode] Palindrome Pairs 回文对
    [LeetCode] 302. Smallest Rectangle Enclosing Black Pixels 包含黑像素的最小矩阵
    Nginx安装及配置详解
    Spring Boot项目属性配置
    maven仓库阿里云镜像配置
    maven仓库阿里云镜像配置
  • 原文地址:https://www.cnblogs.com/Philip-Tell-Truth/p/5130951.html
Copyright © 2011-2022 走看看