POJ 1064 分割线缆(二分查找)
发布日期:2021-07-01 03:39:40
浏览次数:2
分类:技术文章
本文共 3078 字,大约阅读时间需要 10 分钟。
题目链接:
题目大意:多根电缆切成指定段数(每段相同长度),求每段线缆的最大长度(精确到0.01)
这题精度控制是难点,方法很简单,二分查找
Wrong Answer 代码
/** * @description: poj1064,多根电缆切成指定段数(相同长度),求每段最大长度 * @author: michael ming * @date: 2019/5/2 15:14 * @modified by: */#include#include #include #include using namespace std;int main(){ int cables, target, cable_we_get; cin >> cables >> target; double minlen = 0.0, maxlen = 100000, mid, len[10001]; for(int i = 0; i < cables; ++i) { // cin >> len[i]; scanf("%lf", &len[i]);// len[i] += 1E-15;// maxlen = maxlen > len[i] ? maxlen : len[i]; } while(maxlen - minlen > 1E-3) { cable_we_get = 0; mid = minlen + (maxlen - minlen)/2; for(int i = 0; i < cables; ++i) { cable_we_get += (int)(len[i]/mid); } if(cable_we_get >= target) minlen = mid; else maxlen = mid; }// mid = double(floor(mid*100))/100.0;// cout << fixed << setprecision(2) << mid << endl; printf("%.2lf\n", floor(mid*100)/100); return 0;}
Accepted 代码(修改部分见代码最后注释)
/** * @description: poj1064,多根电缆切成指定段数(相同长度),求每段最大长度 * @author: michael ming * @date: 2019/5/2 15:14 * @modified by: */#include#include #include #include using namespace std;int main(){ int cables, target, cable_we_get; cin >> cables >> target; double minlen = 0.0, maxlen = 100000, mid, len[10001]; for(int i = 0; i < cables; ++i) { cin >> len[i];// scanf("%lf", &len[i]); } while(maxlen - minlen > 1E-3) { cable_we_get = 0; mid = minlen + (maxlen - minlen)/2; for(int i = 0; i < cables; ++i) { cable_we_get += (int)(len[i]/mid); } if(cable_we_get >= target) minlen = mid; else maxlen = mid; } cout << fixed << setprecision(2) << floor(maxlen*100)/100.0 << endl;// printf("%.2lf\n", floor(maxlen*100)/100);// 以上两种写法都可以AC,但是注意表达式内不要写mid,要写maxlen// 最后如果是mid=1.999,保留两位,直接是1.99// maxlen是2.001,直接保留2.00 return 0;}
另一种解法:把数据都放大100倍,这样都是整型了
/** * @description: poj1064 数字放大100倍做法,输入浮点数分成整数部分和小数部分,避免1.50输入后变成1.4999999 * @author: michael ming * @date: 2019/5/2 20:00 * @modified by: */#includeusing namespace std;int main(){ int cables, target, cable_we_get; cin >> cables >> target; int minlen = 1, maxlen = 10000000, mid, len[10001], ans; int int_part, float_part; char ch; for(int i = 0; i < cables; ++i) { cin >> int_part >> ch >> float_part; len[i] = int_part * 100 + float_part; } while(maxlen - minlen >= 0) { cable_we_get = 0; mid = minlen + (maxlen - minlen)/2; for(int i = 0; i < cables; ++i) { cable_we_get += len[i]/mid; } if(cable_we_get >= target) minlen = mid+1; else maxlen = mid-1; } cout << maxlen/100 << "." << (maxlen/10)%10 << maxlen%10 << endl; return 0;}
转载地址:https://michael.blog.csdn.net/article/details/89763758 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月12日 08时53分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
1小时点击量破千万!阿里巴巴首发:MySQL高级调优笔记!全是技术重点
2019-05-02
这个GItHub上的Java项目开源了 2021最全的Java架构面试复习指南
2019-05-02
Proftpd MySQL [Step by Step]
2019-05-02
EFI Shell 命令参考
2019-05-02
HP-UX oracle RAC 双机实践
2019-05-02
解决SHELL脚本中的export无法生效的问题【转】
2019-05-02
linux中的sh脚本语法【转】
2019-05-02
区别数据结构中的堆栈与内存中的堆栈的个人总结【转】
2019-05-02
c++中冒号(:)和双冒号(::)的用法【转】
2019-05-02
python中各种下划线的含义
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记三:早期视觉(一幅图像)
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记六:应用之图像搜索和检索
2019-05-02
如何撰写高水平的学术论文
2019-05-02
谭浩强《C++面向对象程序设计》知识点总结
2019-05-02
分享一个关于介绍TextCNN和TextRNN的文章
2019-05-02
关于CNN中感受野的理解和计算方法
2019-05-02
java基础----RandomAccessFile
2019-05-02
__attribute__((packed))
2019-05-02