[二分查找变形]弯曲的木杆(POJ 1905)
2017-10-12 16:09
453 查看
这题很有意思,除了一般的程序知识,还用了数学的东西。推导了一些公式什么的。
这次用了两种方法做,层层深入,希望能让大家体会到代码的改良过程
第一步:
改良:
改进部分在二分搜索部分,表达式进行处理之后,进行运算次数减少。
总结:
输出精度问题,还是用printf解决的好。
这次用了两种方法做,层层深入,希望能让大家体会到代码的改良过程
第一步:
#include <iostream> #include <cstdio> #include <cmath> using namespace std; double binary_searsh(double left, double right, double L,double L1){ double mid,L2 = L * L; while (right - left > 1e-6){ mid = (left + right) / 2; // regard mid as h double rt = (4 * mid * mid + L2)/ (8 * mid); double rR = 2*rt *asin(L / (2 * rt)); if (rR < L1){ left = mid; } else { right = mid; } } return mid; } int main(){ double h = 0,L,n,c; while (cin >> L>> n>> c&& c != -1){ h = 0; if (L == 0 || n == 0 || c == 0){ printf("%.3lf\n",0); } else { double L1 = (1 + n * c) * L; double ans = binary_searsh(0,L/2, L, L1); printf("%.3lf\n",ans); } } }
改良:
#include <iostream> #include <cstdio> #include <cmath> using namespace std; double binary_searsh(double left, double right, double L,double L1){ double mid,L2 = L * L; while (right - left > 1e-6){ mid = (left + right) / 2; // regard mid as h double r_2 = mid + L2 / (4 * mid); double rR = r_2 * asin(L / (r_2)); if (rR < L1){ left = mid; } else { right = mid; } } return mid; } int main(){ double h = 0,L,n,c; while (cin >> L>> n>> c&& c != -1){ h = 0; if (L == 0 || n == 0 || c == 0){ printf("%.3lf\n",0); } else { double L1 = (1 + n * c) * L; double ans = binary_searsh(0,L/2, L, L1); printf("%.3lf\n",ans); } } }
改进部分在二分搜索部分,表达式进行处理之后,进行运算次数减少。
总结:
输出精度问题,还是用printf解决的好。
相关文章推荐
- poj 1064 二分查找变形—判定并找到可行解
- poj 1905 Expanding Rods (二分查找)
- poj 1905 Expanding Rods(木杆的膨胀)【数学计算+二分枚举】
- POJ 1905 - Expanding Rods(二分查找)
- Expanding Rods(POJ--1905【二分查找】
- POJ - 2976 Dropping tests(二分查找,最大化平均值)
- POJ 3579 Median 查找中间值 二分
- 【POJ1905】Expanding Rods 二分答案+推公式
- poj 1064 Cable master - 二分查找
- 面试题_二分查找及其变形
- 二分总结:HDU 1551,4190;POJ 1905,3273,3122,3518;CF 371C
- [POJ] 2456 Aggressive cows (二分查找)
- POJ——3061Subsequence(尺取法或二分查找)
- POJ 1905 Expanding Rods 二分答案几何
- ZOJ2347 Squares (POJ2002 二分查找)
- POJ - 3579 Median(二分搜索,查找第K大的值)
- SGU154——Factorial (poj1401变形题——数论+二分)
- POJ 3273 Monthly Expense(二分查找)
- poj 2456 Aggressive cows(二分查找)
- [POJ](1064)Cable master ---二分查找(查找)