• 奶牛晒衣服


    【问题描述】
    在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1 的时间可以晒干A 点湿度。抠门的熊大妈买了1 台烘衣机。使用烘衣机可以让你用1 的时间使1件衣服除开自然晒干的A 点湿度外,还可烘干B 点湿度,但在1 的时间内只能对1 件衣服使用。
    N 件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0 为干)。
    【输入格式】
    第一行N , A , B , 接下来N 行, 每行一个数, 表示衣服的湿度( 1<= 湿度,A,B<=500000,1<=N<=500000)。
    输出格式
    一行,最少时间。
    输入样例】Dry.in
    3 2 1
    1
    2
    3
    输出样例】Dry.out
    1
    样例解析
    第1 个时间内,用机器处理第3 件衣服,此外,所有衣服自然晒干2。花费1 时间全部弄干。

    这是一道贪心的题,只要每次将湿度最大的衣服放进烘衣机即可。

    不过还要考虑每一件衣服都能自然烘干,那是不是要在每一个时间后都把所有衣服减去 A 呢?这样的话,时间复杂度就太大了。其实只要开一个变量,每一个时间后把这个变量加上 A,然后若一件衣服的湿度小于等于这个变量,就说明已经烘干了。

    还有,每一次取最小,不一定每一次都要在重新排序一遍,只要开一个优先队列就行。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 #define rep(i, a, n) for(int i = a; i <= n; ++i)
     9 #define per(i ,n, a) for(int i = n; i >= a; --i)
    10 typedef long long ll;
    11 int n, all, ext;
    12 int tim = 0, down = 0;
    13 priority_queue<int>q;
    14 int main()
    15 {
    16     freopen("dry.in", "r", stdin);
    17     freopen("dry.out", "w", stdout);
    18     scanf("%d%d%d", &n, &all, &ext);
    19     rep(i, 1, n) {int x; scanf("%d", &x); q.push(x);}
    20     while(!q.empty())
    21     {
    22         int temp = q.top(); q.pop();
    23         if(temp <= down) break;            //说明所有衣服已经烘干了 
    24         tim++; down += all;
    25         temp -= ext; q.push(temp); 
    26     }
    27     printf("%d
    ", tim);
    28     return 0;
    29 }
  • 相关阅读:
    盲签名——典型的数字签名技术
    环签名——典型的数字签名技术
    多重签名——典型的数字签名技术
    历史多数攻击——共识攻击介绍
    看一篇,学一篇,今日份的pandas,你该这么学!No.2
    哈希算法
    什么是多重签名?多重签名的概念
    POJ 1023 The Fun Number System
    (四)Spring Boot之配置文件-多环境配置
    (四)Spring Boot之配置文件-多环境配置
  • 原文地址:https://www.cnblogs.com/mrclr/p/8540043.html
走看看 - 开发者的网上家园