1131 - 喵哈哈村的几何大师╰☆莣メ誋こ月(“玲珑杯”线上赛 Round #15 河南专场)

题目链接:http://ifrog.cc/acm/problem/1131

做这个题的时候真的是。。。 数学忘完了, 失了智;

还是一位学弟的思路。

设置等腰三角形的下边长为1,其他的边都可以根据正余弦公式得出近似精确的长度。然后在根据正余弦公式算出所求角的大小。

代码如下:

#include<bits/stdc++.h>
using namespace std;
double N=1000;
const double pi=180/acos(-1);
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        double a,b,c,d;
        scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
        double D=N*(sin((c+d)/pi))/(sin((180-a-b-c-d)/pi));
        double x=N*(sin(d/pi))/sin((180-a-b-d)/pi);
        double y=N*(sin(b/pi))/sin((180-b-c-d)/pi);
        double z=sqrt((D-x)*(D-x)+(D-y)*(D-y)-2*cos((180-a-b-c-d)/pi)*(D-x)*(D-y));
        double e=(D-y)*(sin((180-a-b-c-d)/pi))/(z);
        e=asin(e)*pi;
        if((D-y)*(D-y)>(D-x)*(D-x)+z*z)
            e=180-e;
        printf("%.2f\n",e-a);
    }
    return 0;
}
posted @ 2017-06-05 14:24  aiterator  阅读(147)  评论(0编辑  收藏  举报