POJ3104 Drying 二分搜索
来源:互联网 发布:大学生借钱的软件 编辑:程序博客网 时间:2024/04/29 21:43
题目大意是:Jane洗完N件衣服,每件衣服含水量ai,每一分种,这些衣服的水量都会减少1个单位,为了加快时间让这些衣服都晾干,Jane使用了烘干机,但是烘干机每分钟只能烘一件衣服,每分钟烘干机会使这件衣服减少k水分(减到0后不会继续减了)。计算出总共最少需要花多少时间才能晾干所有衣服。
二分搜索,设C(x):=x分钟内能将这些衣服全部晾干。至于如何判断C(x)成立,首先可以知道确定了x,那么烘干机也最多能用x分钟。我们只要依次对每一件衣服进行判断,当ai > x时,那这件衣服是肯定需要烘干机进行帮助的,然后该衣服需要烘干机的时间为 ceil((ai - x) / (k - 1)),注意分母是k-1不是k。到这里就可以编码了。
#include <stdio.h>#include <vector>#include <math.h>#include <string.h>#include <string>#include <iostream>#include <queue>#include <list>#include <algorithm>#include <stack>#include <map>using namespace std;int cost[100001];bool CC(int x, int n, int k){int left = x;for (int i = 0; i < n;i++){if (cost[i] > x){left -= (ceil((cost[i] - x) / (double)(k - 1)));}if (left < 0){return false;}}return true;}int main(){#ifdef _DEBUGfreopen("e:\\in.txt", "r", stdin);#endifint n,k;scanf("%d\n", &n);int maxtime = 0;for (int i = 0; i < n;i++){scanf("%d", &cost[i]);if (maxtime < cost[i]){maxtime = cost[i];}}scanf("%d", &k);int l = 0;int r = maxtime + 1;while (r - l > 1){int mid = (r + l) / 2;if (CC(mid, n, k)){r = mid;}elsel = mid;}printf("%d\n", r);return 0;}
0 0
- POJ3104 Drying 二分搜索
- POJ3104 Drying [二分]
- POJ3104:Drying(二分)
- [二分]poj3104 Drying
- poj3104 Drying(二分)
- CSU-ACM2017暑假集训2-二分搜索 poj3104-drying
- POJ3104 Drying(二分答案)
- POJ3104 Drying (二分的力量2)
- POJ3104 Drying
- POJ3104 Drying
- POJ3104--Drying
- POJ3104-Drying
- POJ3104 Drying
- POJ3104-Drying
- 二分搜索--poj3104
- POJ 3104 Drying 二分搜索
- POJ 3104 - Drying(二分搜索)
- poj3104 二分
- SharePoint 网站导航Web部件
- javascript函数的声明,及返回值
- nginx--pstack
- QT使用遇到的种种问题和解决方法
- 2014年暑假培训 - 二分三分
- POJ3104 Drying 二分搜索
- Linux U盘助手(二)
- 黑马程序员-c#连接数据库
- Android中AIDL使用例子
- 编程算法 - 最长公共子序列(LCS) 代码(C)
- Blue Jeans(包含两个查找字符串的重要函数)
- grub rescue语法
- Bit Mask uva+贪心
- Windows Mobile 设备注册到Afaria服务器上