Dying[二分]
来源:互联网 发布:磁条卡写卡软件 编辑:程序博客网 时间:2024/06/05 08:29
题意:给n件衣服去晒干,自然干每分钟-1, 烘干每分钟-k,给定n个数字和k,求最小烘干时间。(烘干机每个时刻只能烘一件衣服)
思路:数据范围1e5找nlogn的算法,二分时间。
二分的单调性:如果能在T时间内完成任务,则在任意
二分的check(mid):一件衣服能的湿度小于等于mid,则无需用烘干机,否则设烘干的时间需要
所以累加
#include<iostream>#include<string>#include<cstdio>#include<cstring>#include<bitset>#include<algorithm>#include<map>#include<set>#include<queue>#include<vector>#include<cstdlib>#include<list>#include<stack>#include<cmath>#include<iomanip>using namespace std;//#pragma comment(linker, "/STACK:1024000000,1024000000")typedef long long LL;void debug() {cout << "ok running!" << endl;}\int a[100005], n, k, m;bool check(int mid){ int flag = 1; int sum = 0; if(k == 1) return mid>=m; for(int i = 0; i < n; ++i) { if(a[i] <= mid) continue; sum += (a[i]-mid+k-2)/(k-1); if(sum > mid) { flag = 0; break; } } return flag;}int main(){ ios::sync_with_stdio(false); #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif // ONLINE_JUDGE while(cin >> n) { m = 0; for(int i = 0; i < n; ++i) { cin >> a[i]; m = max(m, a[i]); } cin >> k; int l = 0, r = m; int ans = -1; while(l <= r) { int mid = (l+r) >> 1; if(check(mid)) { ans = mid; r = mid-1; } else l = mid+1; } cout << ans << endl; } return 0;}
阅读全文
0 0
- Dying[二分]
- Dying Young
- Dying Gasp
- Dying In The Sun
- SharePoint is Dying
- A protocol for Dying
- HDU-6164:Dying Light
- Get Busy Living, or Get Busy Dying.
- Get busy living or get busy dying
- get busy trying or get busy dying
- Dying In The Sun~~逝去于阳光之下
- 多校9 HDU-6164 Dying Light 几何数学
- 从Dying gasp功能看Linux的响应速度
- 二分
- 二分
- 二分
- 二分
- 二分
- Linux: shell拆分浮点数的整数和小数部分 && 拆分文件的文件名和扩展名
- 什么是Java语言?
- 移动端弱网测试及Chrome前端调试
- 为什么我们要使用Async、Await关键字
- 实用类
- Dying[二分]
- HDU5873Football Games(思维题)
- LNMP1.2及之后版本–添加、删除虚拟主机教程
- adapter基类的封装
- 《Android开发艺术探索》笔记——Bitmap的加载和Cache(二)
- 简单瀑布流的实现
- 文件IO小项目-模拟登陆系统
- Google算法题:二进制手表
- bugku never give up