zoj3806Incircle and Circumcircle
自己的本本没有装画图软件,先借用两张图片。。博客园不让贴源地址。。。
可以想到对于一个确定的外接圆的三角形来说内切圆最大的时候为等边三角形,如下图:
确定有合法的解之后,接下来就是去找这个解,解不唯一,可以知道一定可以构造出一个等腰三角形使得满足条件,可以看下图,对于一个确定的外接圆,已知底边和外接圆半径的话,是可以求出三边的,随着底边的缩小和伸长内切圆是先变大后变小,而最大的时候就是上述所说,等边的时候。所以知道了上下界,就可以直接二分底边了,二分的区间就是下图所标区间。
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<cmath>
#include<queue>
#include<set>
using namespace std;
#define N 100000
#define LL long long
#define INF 0xfffffff
const double eps = 1e-;
const double pi = acos(-1.0);
const double inf = ~0u>>;
int dcmp(double x)
{
if(fabs(x)<eps) return ;
return x<?-:;
}
int cal(double x,double R,double r)
{
if(dcmp(R*R-x*x)<) return ;
double a = sqrt(*R*R+*R*sqrt(R*R-x*x));
double b = a;
double c = *x;
double s = (a+b+c)/;
double tt = (s-a)*(s-b)*(s-c)/s;
if(dcmp(tt)<) return ;
double tr = sqrt(tt);
if(dcmp(tr-r)>=) return ;
return ;
}
int main()
{
double r1,r2;
while(scanf("%lf%lf",&r1,&r2)!=EOF)
{
if(dcmp(*r1-r2)>)
{
puts("NO Solution!");
continue;
}
double rig = sqrt(3.0)*r2,lef = ,mid;
while(rig-lef>eps)
{
mid = (lef+rig)/;
if(cal(mid,r2,r1))
rig = mid;
else lef = mid;
}
// printf("%f\n",rig);
double a = sqrt(*r2*r2+*r2*sqrt(r2*r2-rig*rig));
double b = a;
double c = *rig;
printf("%.15f %.15f %.15f\n",a,b,c);
}
return ;
}
zoj3806Incircle and Circumcircle的更多相关文章
- Incircle and Circumcircle(二分+几何)浙大月赛zoj3806(详解版)图
Incircle and Circumcircle Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge A triangle is o ...
- !gluLookAt与glOrtho 参数解析
void gluLookAt( GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLd ...
- hdu4720Naive and Silly Muggles
链接 一直理解的最小覆盖圆就是外接圆..原来还要分钝角和锐角... 钝角的话就为最长边的中点,对于这题分别枚举一下外接圆以及中点的圆,判一下是不是在园外. #include <iostream& ...
- poj1329Circle Through Three Points(三角形外接圆)
链接 套模板 不知道有没有x,y=0情况,不过这种情况都按+号输出的. #include <iostream> #include<cstdio> #include<cst ...
- poj1266Cover an Arc(三角形外接圆)
链接 求出三角形的外接圆,通过圆心和半径可以知道这个圆的上下左右最远点,分别判断这个四个点跟弧的两端点A,B的关系,假如判断P点,弧内给出点为C,判断PC是否与AB相交即可判断出P是否在弧上. 精度问 ...
- ZOJ Monthly, August 2014
A Abs Problem http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5330 找规律题,构造出解.copyright@ts ...
- Codeforces Round #219 (Div. 1)(完全)
戳我看题目 A:给你n个数,要求尽可能多的找出匹配,如果两个数匹配,则ai*2 <= aj 排序,从中间切断,分成相等的两半后,对于较大的那一半,从大到小遍历,对于每个数在左边那组找到最大的满足 ...
- hdu 4720
最小覆盖圆的模板: #include<stdio.h> #include<string.h> #include<math.h> struct Point { dou ...
- 不规则三角网 Delaunay——TIN
http://blog.csdn.net/u010025211/article/details/25032209 知识点一:平面中判断一个点是否在三角形内部. #include <stdio.h ...
随机推荐
- Ubuntu 16.04 Steam
Ubuntu 16.04安装Steam,直接去Steam官网下载客户端安装包即可.
- 夺命雷公狗----Git---4---多人协作实现
基本流程: 1..创建一个git裸服务器(git init --bare) 2..从裸服务器将版本库克隆到本地(git clone) 3..本地常规操作(git remote + git push o ...
- 实体框架高级应用之动态过滤 EntityFramework DynamicFilters
实体框架高级应用之动态过滤 EntityFramework DynamicFilters 我们开门见山,直奔主题. 一.EntityFramework DynamicFilters 是什么,它能做什么 ...
- 3D数学的实际应用
以前自己在学习三维程序开发时并没有在意3D数学在程序中的重要作用,但在实际工作中逐渐发现:自己忽视了3D数学的作用,我们实际开发工作总要求模型准确的变换,而不是强调渲染有多炫,那是游戏,如果是仿真程序 ...
- java加法流程图
- Android数字签名
描述你对Android数字签名的理解? 数字签名就是为程序打上一个标记来作为自己的标识,是Android系统要求的,若一个Android程序没有经过数字签名,没办法安装到系统: 签名也是对apk的一种 ...
- IIS的配置
一.首先是安装IIS.打开控制面板,找到“程序与功能”,点进去 二.点击左侧“打开或关闭Windows功能” 三.找到“Internet 信息服务”,按照下图打勾即可 等待安装完成 四.安装完成后,再 ...
- Highcharts使用教程(2):设置选项
Highcharts使用教程(2):设置选项 使用教程 | 作者:走猫步的鱼 | 2013-12-11 09:33:25 | 阅读 16次 评论 1 概述:JavaScript图表工具Highchar ...
- eclipse安装插件
http://blog.csdn.net/powmxypow/article/details/11553395
- ftp发送文件
#!/bin/bash #author:luyongjin IP=220.250.65.22 USERNAME='ftp_hangye20' PASSWORD='oUo2JD7oK#u-epw' #D ...