1000ms 131072K
联想公司最近要设计一个体现公司文化的 logo。联想的设计师想出了一个方案:先画了一个顶点 O,接着画出以顶点O为公共顶点的、夹角为 θ 的两条线段 l1 和 l2,其中 l1 作为圆 C1 的直径,l2l 作为圆 C2C 的直径。两个圆需要画在同一个圆形的塑料板上。请算出这个塑料板最小的面积是多少。
输入格式
输入只有一行,一共 333 个浮点数 l1、l2 和 θ。其中 0=<l1,l2<=10^3;−10^3≤θ≤10^3.
θ单位是度,即当 θ\thetaθ 为 90 度时,sinθ=1。
输出格式
输出一行,表示圆形塑料板的最小面积。结果误差在 10^-6 以内均被认为是正确的。
样例输入1
1 1 90
样例输出1
2.2888179796
样例输入2
6 6 -666
样例输出2
59.774440524
题意:已知两个圆的直径(一端共同在坐标轴的原点),且知道夹角,求在此平面的一个最小圆,能包含这两个已知圆。
题目链接:联想公司的 logo 设计
解题思路:关键就是确定圆的位置,证明我要去试试再补。
官方解释:连接两条线段的中点,向两边延长直到和两个圆相交,两个交点连线即为最小的外接圆直径。其中,两条线段中点的距离可以用余弦定理求得。需要注意精度问题,比如π 最好使用 acos(−1)而非 3.1415。
代码:
// 联想公司的 logo 设计
//题目链接:http://nanti.jisuanke.com/t/11155
#include
#include
#include
#include
#include
using namespace std; const double PI = acos(-1); //就是 π的值 int main() { double l1,l2,rad,ans; while(~scanf("%lf%lf%lf",&l1,&l2,&rad)){ double len=(l1*l1+l2*l2)-(2*l1*l2*cos(rad*PI/180));//余弦定理a^2+b^2-2*a*b*cos(角度)=c^2 len=sqrt(len)/2; //开根号求c ans=(len+(l1+l2)/2)/2; //大圆半径 ans=PI*ans*ans; //面积公式 printf("%.9f\n",ans); } return 0; }