题目背景
熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 。 于是 , 为牛宝宝洗晒衣
服就成了很不爽的事情。
题目描述
熊大妈请你帮助完成这个重任 。 洗完衣服后 , 你就要弄干衣服 。 衣服在
自然条件下用 1 的时间可以晒干 A 点湿度 。 抠门的熊大妈买了 1 台烘衣机 。
使用烘衣机可以让你用 1 的时间使 1 件衣服除了自然晒干 A 点湿度外,还
可以烘干 B 点湿度,但在 1 的时间内只能对 1 件衣服使用。
N 件衣服因为种种原因而不一样湿 , 现在告诉你每件衣服的湿度 , 要你
求出弄干所有衣服的最少时间(湿度为 0 为干 ) 。
输入格式
第一行 N , A , B ;接下来 N 行,每行一个数,表示衣服的湿度( 1 ≤ 湿
度, A , B ≤ 500000 , 1 ≤ N ≤ 500000 ) 。
输出格式
一行,弄干所有衣服的最少时间。
输入输出样例
输入 #1复制
3 2 1 1 2 3
输出 #1复制
1
说明/提示
第 1 个时间内,用机器处理第 3 件衣服,此外,所有衣服自然晒干 。 花
费 1 时间全部弄干。
二分答案+判定
#include <iostream> #include <algorithm> using namespace std; #define R register #define MAXN 500000+5 int n,a,b,s[MAXN]; inline bool check(int maxx) { R int tot=0; for(R int i=1;i<=n;i++) { if(s[i]<maxx*a) continue; tot+=(s[i]-maxx*a)/b; if((s[i]-maxx*a)%b) tot++; } if(tot<=maxx) return 1; return 0; } int main() { cin>>n>>a>>b; for(R int i=1;i<=n;i++) cin>>s[i]; sort(s+1,s+1+n); R int l=s[1],r=s[n],mid,ans=s[n]; while(l<=r) { mid=l+r;mid>>=1; if(check(mid)) ans=mid,r=mid-1; else l=mid+1; } cout<<ans<<endl; return 0; }
原文地址:https://www.cnblogs.com/000226wrp/p/11336335.html
时间: 2024-10-10 14:11:56