几何题
英文太差了,比赛的时候以为是求面积,直接自闭,看到有人能做出来还很郁闷。机器翻译了一下,贼尴尬。
求周长。
先判断圆与圆之间的关系,这里只有两种情况对结果有影响,内切和相交,内切直接加上另一圆的周长,相交需要减去原来圆的部分加上相交圆的部分。
具体效果如图:
看明白题目就很简单,余弦定理。
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define pai 3.14159265358979323846264338327950288419716939937510
using namespace std;
int main()
{
int T,i,n,m;
double j,k,l,x,y,r,R,C;
scanf("%d",&T);
while(T--)
{
scanf("%d%lf",&m,&R);
C=2*pai*R;
while(m--)
{
scanf("%lf%lf%lf",&x,&y,&r);
l=sqrt(x*x+y*y);
if(l+r>R&&l-r<R)
{
double r1=acos((l*l+r*r-R*R)/(2.0*l*r));
double R1=acos((R*R+l*l-r*r)/(2.0*R*l));
C=C+r*2.0*r1-R*2.0*R1;
}
else if(l==R-r)
{
C=C+2.0*pai*r;
}
}
printf("%lf\n",C);
}
return 0;
}