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;
}