本文主要是介绍uva 10668 - Expanding Rods(二分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接:uva 10668 - Expanding Rods
题目大意:有一根长度为L的木棍被固住两端,现在为它加热,木棍受热增长L‘=(1+nC)∗L长度变长,形成弧形。求木棍中心的偏离高度。
解题思路:因为L′形成圆弧形,所以二分圆心角,判断即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;
const double pi = 4 * atan(1.0);double parabola_length (double w, double x) {double r = w / sin(x/2);return x * r;
}double bsearch (double l, double r, double v, double w) {for (int i = 0; i < 100; i++) {double mid = l + (r - l) / 2;if (parabola_length(w, mid) < v)l = mid;elser = mid;}return r;
}double solve (double w, double x) {return (1 - cos(x/2)) * w / sin(x/2);
}int main () {double L, l, n, c;while (scanf("%lf%lf%lf", &L, &n, &c) == 3) {if (L < 0 && n < 0 && c < 0)break;l = (1 + n * c) * L;printf("%.3lf\n", solve(L/2, bsearch(0, pi, l, L/2)));}return 0;
}
这篇关于uva 10668 - Expanding Rods(二分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!