Incircle and Circumcircle(二分+几何)浙大月赛zoj3806(详解版)图

Incircle and Circumcircle


Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge


A triangle is one the basic shapes in geometry. It‘s a polygon with three vertices and three sides which are line segments. A triangle with vertices A, B, C is denoted ΔABC. And its three sides, BC, CA, AB are often denoted a, b and c.

The incircle of a triangle is the largest circle contained in the triangle, it is tangent to the three sides. The center of the incircle is called the triangle‘s incenter and the radius of the incircle is called inradius, which is denoted r.

The circumcircle of a triangle is the circle which passes through all its three vertices. The center of the this circle is called circumcenter and its radius is called circumradius, which is denoted R.

It‘s very easy to calculate r and R after knowing a, b and c. Now you are given r and R, can you calculate a valid triple (a, b, c)?

Input

There are multiple cases. Each case has two positive integers r and R in one line. (r and R are less than 105)

Ouput

For each case, print three floating numbers a, b and c in one line if it‘s possible to get r and R. If there are no possible tuples, print "NO Solution!".

The judge program uses your a, b and c to calculate the inradius and circumradius. Only the relative error of your inradius and circumradius less than 10-8 will be accepted.

Sample Input

1 2
2 5
9 9

Sample Ouput

3.464101615137754587 3.464101615137754587 3.464101615137754587
6 8 10
NO Solution!

题目大意:给你一个三角形的内切圆半径跟外接圆半径,求解出符合条件的三角形,输出三角形的三条边的长度,如果没有符合条件的三角形,输出“NO Solution!”。

解题思路:这个题是SP,既是因为情况不唯一,而且还有精度的误差。

首先能够想到的就是NO Solution!的情况,即当内切圆半径等于1/2外接圆半径时,此时内切圆最大,而三角形为等边三角形,如图。

其次要解决的就是怎么构造三角形的问题,因为解不唯一,所以只要列举出一种解就OK,于是就很容易的想到构造等腰三角形,在最大与最小之间二分等腰三角形的底边长度,解三角形得到答案,如图。

思路就是二分,不明白的看下面的图;

ps:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5338

浙大月赛ZOJ Monthly, August 2014其他题

http://www.cnblogs.com/yuyixingkong/p/3935199.html

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
    double r,R;
    double ldi,rdi,mi;//左,右,中
    double H,h,yao,o;//H:外心到等腰三角形底边的距离;h:等腰三角形的高;yao:表示腰长;o:内心半径
    double eps=1e-9;
    while(~scanf("%lf%lf",&r,&R))
    {
        if(R>2*r)
        {
            printf("NO Solution!\n");
            continue;
        }
        ldi=0;
        rdi=R*sqrt(3)/2;//最大等边三角形;所以区间长度最长是
        while(rdi-ldi>eps)
        {
            mi=(rdi+ldi)/2;
            H=sqrt(R*R-mi*mi);
            h=H+R;
            yao=sqrt(h*h+mi*mi);
            o=(mi*h)/(yao+mi);//等腰三角形同面积法
            if(o<r)
                ldi=mi;
            else
                rdi=mi;
        }
        mi=(rdi+ldi)/2;
        H=sqrt(R*R-mi*mi);
        h=H+R;
        yao=sqrt(h*h+mi*mi);
        o=(mi*h)/(yao+mi);
        printf("%.18f %.18f %.18f\n",mi*2,yao,yao);
    }
    return 0;
}
时间: 2024-10-13 00:58:26

Incircle and Circumcircle(二分+几何)浙大月赛zoj3806(详解版)图的相关文章

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 (d

ZOJ 3806 Incircle and Circumcircle 【几何】【special judge】

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3806 题目大意:给一个三角形的外接圆半径以及内切圆半径,求满足给出条件的三角形的三条边. 题目给出的样例有点坑.......容易误导人 Sample Input 1 2 2 5 9 9 Sample Ouput 3.464101615137754587 3.464101615137754587 3.464101615137754587 6 8 10 NO Sol

记次浙大月赛 134 - ZOJ Monthly, June 2014

链接 虽做出的很少,也记录下来,留着以后来补..浙大题目质量还是很高的 B 并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类关系题目还是比较常见的,有空深究一下. 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6

php 二分查找法算法详解

一.概念:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表.重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功. 二.代

HDU 1507 Uncle Tom&#39;s Inherited Land*(二分匹配,输出任意一组解)

<p style="margin: 10px auto; line-height: 19.5px; font-size: 13px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; background-color: rgb(40, 85, 126);"> 要输出任意一组解.</p><p style="margin: 10px auto; line-height: 19.5p

机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法

摘要 聚类是一种无监督的学习(无监督学习不依赖预先定义的类或带类标记的训练实例),它将相似的对象归到同一个簇中,它是观察式学习,而非示例式的学习,有点像全自动分类.说白了,聚类(clustering)是完全可以按字面意思来理解的--将相同.相似.相近.相关的对象实例聚成一类的过程.机器学习中常见的聚类算法包括 k-Means算法.期望最大化算法(Expectation Maximization,EM,参考"EM算法原理").谱聚类算法(参考机器学习算法复习-谱聚类)以及人工神经网络算法

浙大&amp;川大提出脉冲版ResNet:继承ResNet优势,实现当前最佳

浙大&川大提出脉冲版ResNet:继承ResNet优势,实现当前最佳 选自arXiv,作者:Yangfan Hu等,机器之心编译. 脉冲神经网络(SNN)具有生物学上的合理性,并且其计算潜能和传统神经网络相同,主要障碍在于训练难度.为解决这个问题,浙江大学和四川大学近日提出了脉冲版的深度残差网络 Spiking ResNet.为解决模型转换的问题,研究者提出了一种新机制,对连续值的激活函数进行标准化,以匹配脉冲神经网络中的脉冲激发频率,并设法减少离散化带来的误差.在多个基准数据集上的实验结果表明

uva 11978 - Fukushima Nuclear Blast(二分+几何)

题目链接:uva 11978 - Fukushima Nuclear Blast 二分,圆和多边形面积交.将多边形拆成n份三角形(每两点与圆心构成),计算有向面积.每个三角形和圆的面积分四类讨论. #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; const double

ZOJ 3806 Incircle and Circumcircle

题意:已知三角形的内接圆半径和外接圆半径,求符合的三角形边长 思路:假设是等腰三角形,内接圆半径最大的情况是等边三角形,直接在(0,pi/3)范围内二分底角 #include <iostream> #include <cmath> #include <stdio.h> #include <algorithm> using namespace std; #define eps 1e-10 double pi=2*asin(1.0); int main() {