zoukankan      html  css  js  c++  java
  • 奶牛晒衣服 题解

    奶牛晒衣服(dry)

    [问题描述]

    在熊大妈英明的带领下,时针和它的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。

    圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用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时间全部弄干

    —————————————————————分割线—————————————————————

    法一:二分答案,检验是否合法即可。

     1 #include "iostream"
     2 
     3 using namespace std ;
     4 const int maxN = 5e5 + 1e3 ; 
     5 
     6 int arr[ maxN ] ;
     7 
     8 int N , A , B ;
     9 
    10 inline int INPUT ( ) {
    11         int x = 0 , f = 1 ; char ch = getchar ( ) ;
    12         while ( ch < '0' || '9' < ch ) { if ( ch == '-' ) f = -1 ; ch = getchar ( ) ; }
    13         while ( ch >= '0' && ch <= '9' ) { x = ( x << 1 ) + ( x << 3 ) + ch -'0' ; ch = getchar ( ) ; } 
    14         return x * f ;
    15 } 
    16 
    17 bool Check ( int mid ) {
    18         int rest = 0 ;
    19         for ( int i=1 ; i<=N ; ++i ) {
    20                 int temp = arr[ i ] - A * mid ;
    21                 if ( temp > 0 ) rest += ( temp + B - 1 ) / B ;
    22                 if ( rest > mid ) return false ;
    23         }
    24         return true ;
    25 }
    26 int main ( ) {
    27         freopen ( "dry.in" , "r" , stdin ) ; freopen ( "dry.out" , "w" , stdout ) ; 
    28         N = INPUT ( ) ; A = INPUT( ) ; B = INPUT ( ) ;
    29         for ( int i=1 ; i<=N ; ++i ) {
    30                 arr[ i ] = INPUT ( ) ;
    31         } 
    32         int Ans = 0 ; 
    33         int L = 0 , R = maxN ; 
    34         while ( L <= R ) {
    35                 int mid = L + R >> 1 ;
    36                 if ( Check ( mid ) ){
    37                         Ans = mid ; 
    38                         R = mid - 1  ;
    39                 }
    40                 else 
    41                         L = mid + 1 ; 
    42         }
    43         cout << Ans << endl ; 
    44         return 0 ; 
    45 }
    View Code

    法二:用堆优化,每次选出最大的一个。

     1 #include "bits/stdc++.h"
     2 
     3 using namespace std ;
     4 const int maxN = 1e5 + 1e3 ; 
     5 
     6 priority_queue< int , vector< int > , greater< int > > Q ;
     7 
     8 int INPUT ( ) {
     9         int x = 0 , f = 1 ; char ch = getchar ( ) ;
    10         while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) f = -1 ; ch = getchar ( ) ; } 
    11         while ( ch <='9' && ch >= '0' ){ x = ( x << 1 ) + ( x << 3 ) + ch - '0' ; ch = getchar ( ) ; } 
    12         return x * f ;
    13 }
    14 
    15 int main ( ) {
    16         int T = 0 ; 
    17         //freopen ( "hah.in" , "r" , stdin ) ;
    18         int N = INPUT ( ) , A = INPUT ( ) , B = INPUT ( ) ;
    19         for ( int i=1 ; i<=N ; ++i ) Q.push( -INPUT ( ) ) ; 
    20         while ( -Q.top( ) - T * A > 0 ) {
    21                 int tmp = -Q.top( ) ;
    22                 Q.pop( ) ;        
    23                 Q.push( B - tmp ) ; 
    24                 ++T ; 
    25         }
    26         cout << T << endl ;
    27         return 0 ; 
    28 }
    View Code

    2016-10-17 16:19:21

  • 相关阅读:
    OpenCV C++ 图像处理之自动色阶
    OpenCV Gamma校正 图像灰度变化
    ISP基本框架及算法介绍
    摄像机gamma校正
    OpenCV 图像增强(方法:伽马变换)
    Gamma的完全理解
    Photoshop中可选颜色是如何计算的?
    OpenCV实现Photoshop算法(九): 高反差保留
    OpenCV实现Photoshop算法(八): 可选颜色
    OpenCV实现Photoshop算法(七): 调整色相饱和度
  • 原文地址:https://www.cnblogs.com/shadowland/p/5970197.html
Copyright © 2011-2022 走看看