POJ3104 Drying [二分]
2016-01-09 15:16
489 查看
题目不是非常难
大体思路:
题意:烘干机,给出一堆衣服的水分a[i],在不加烘干机情况下自己主动每一分钟降低1水分。每分钟能够变改衣服(i)到烘干机中,每分钟降低k水分,求最少须要多少时间。
题解:第一时间就想到使用二分枚据答案+验证这样的思路,只是这题还是有些陷阱须要注意。
1. 验证答案时,假设 a[i] <= mid。让它自然烘干就可以 。 假设a[i] > mid,那么烘干这件衣服能够分成两段时间:使用烘干机时间x1 + 自然烘干时间x2,那么能够列出等式:mid = x1 + x2; a[i] <= kx1+x2;于是得x1 >= (a[i] -mid)/(k-1);即得使用烘干机的最少时间x1
2.注意当k==1时。k-1 == 0。须要特殊处理。直接打出ans = maxV
3.注意当求left+right时,结果可能超出范围,正确的方法应该是left + (right - left)*0.5;
犯了一个非常2的错误,ceil(int/int),应该是ceil(int*1.0/int)
再次验证我的二分写法没错,哇哈哈哈
标准的
while l<r
l=mid+1;
r=mid;
mid=l+(r-l)/2;
代码例如以下
大体思路:
题意:烘干机,给出一堆衣服的水分a[i],在不加烘干机情况下自己主动每一分钟降低1水分。每分钟能够变改衣服(i)到烘干机中,每分钟降低k水分,求最少须要多少时间。
题解:第一时间就想到使用二分枚据答案+验证这样的思路,只是这题还是有些陷阱须要注意。
1. 验证答案时,假设 a[i] <= mid。让它自然烘干就可以 。 假设a[i] > mid,那么烘干这件衣服能够分成两段时间:使用烘干机时间x1 + 自然烘干时间x2,那么能够列出等式:mid = x1 + x2; a[i] <= kx1+x2;于是得x1 >= (a[i] -mid)/(k-1);即得使用烘干机的最少时间x1
2.注意当k==1时。k-1 == 0。须要特殊处理。直接打出ans = maxV
3.注意当求left+right时,结果可能超出范围,正确的方法应该是left + (right - left)*0.5;
犯了一个非常2的错误,ceil(int/int),应该是ceil(int*1.0/int)
再次验证我的二分写法没错,哇哈哈哈
标准的
while l<r
l=mid+1;
r=mid;
mid=l+(r-l)/2;
代码例如以下
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> using namespace std; long long num[111111]; int main() { //cout<<"here"<<endl; //cout<<ceil(3.4)<<endl; //cout<<ceil(4)<<endl; //cout<<"end"<<endl; long long n,k; long long maxn=0; while(scanf("%lld",&n)!=EOF) { for(long long i=1;i<=n;i++) { scanf("%lld",&num[i]); maxn=max(maxn,num[i]); } sort(num+1,num+1+n); scanf("%lld",&k); if(k==1) { printf("%lld\n",maxn); continue; } long long l=1,r=maxn,mid=(r+l)/2; long long ans=0; while(l<r) { //mid=(l+r)/2; long long sum=0; for(long long i=1;i<=n;i++) { if(num[i]>mid) sum+=ceil((num[i]-mid)*1.0/(k-1)); } if(sum>mid) l=mid+1; else if(sum<=mid) { r=mid; } mid=(l+r)/2; } printf("%lld\n",mid); } }
相关文章推荐
- 把一个字符串反输出abc123.xyz789输出987zyx.321cba
- matlab做偏最小二乘回归
- 分享一个链接
- TextView高度和文字高度不一致!美工给的尺寸在eclipse做完显示不一致的问题!
- WebService学习总结(四)——调用第三方提供的webService服务(还未学习到,先保留着)
- 关于Struts2的类型转换详解
- ionic安卓打包发布Release
- Enumerator yielder.yield 与 Proc.yield 区别
- java入门学习(2)—基本数据类型
- GitHub上最火的40个iOS开源项目
- python1-7章学习摘要
- Python学习手册 - 07
- Qt从零开始制作串口调试助手(V1.0)源代码-Creator_Ly
- ViewPage第三课自定义viewpage
- WebService学习总结(三)——使用JDK开发WebService(自己还未实验成功 呜呜。。。)
- jsp请求由servlet响应的方式
- GitHub上最火的40个iOS开源项目
- 快速排序算法 和 实现
- 快速排序算法 和 实现
- 免费馅饼 OJ 613