首页 > 代码库 > zoj 3806 Incircle and Circumcircle(二分)
zoj 3806 Incircle and Circumcircle(二分)
题目链接:zoj 3806 Incircle and Circumcircle
题目大意:给定三角形的内接圆半径和外切圆半径,求三角形的三边长。
解题思路:以等腰三角形去构造,确定外切圆半径的时候,内切圆半径的范围为0?3 ̄ ̄√R,二分判断即可。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
double f (double a, double R) {
double t = sqrt(R * R - a * a / 4) + R;
return sqrt(t * t + a * a / 4);
}
double judge (double a, double b, double R) {
return a * b * b / (2 * R * (a + b + b));
}
double bsearch (double l, double R, double v) {
double r = sqrt(3.0) * R;
for (int i = 0; i < 1000; i++) {
double mid = (l + r) / 2;
double x = f(mid, R);
if (judge(mid, x, R) > v)
r = mid;
else
l = mid;
}
return (l + r) / 2;
}
int main () {
int r, R;
while (scanf("%d%d", &r, &R) == 2) {
if (r * 2 > R)
printf("NO Solution!\n");
else {
double a = bsearch(0, R, r);
double b = f(a, R);
printf("%.10lf %.10lf %.10lf\n", a, b, b);
}
}
return 0;
}
zoj 3806 Incircle and Circumcircle(二分)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。