"蔚来杯"2022牛客暑期多校训练营1
题意:求圆心在原点的圆形中一条可以旋转的线段,过它两端点处做垂线后所截取的弧长最大值.
注意:题中线段无论怎样旋转都不会超出圆形.
将图形画出后平移所截取圆弧的割线可以与题中的线段构成三角形,由三角形三遍关系可以知道两个垂线段的长度差值越大则割线的圆弧部分线段长度越长,而两个垂线段的长度差值取决于什么呢.很明显取决于过圆心做线段的垂线其在线段上的垂足到两端点的距离的差值.这个值最大便是当线段所在直线过圆心时的位置.
于是题目便转化为了给出线段求弧长的题目.而计算部分则只需要利用好圆心到线段两端点的距离即可.
#include<bits/stdc++.h>
using namespace std;
int T;
int main(){
cin>>T;
double r,x,y,d,L;
while(T--){
cin>>r>>x>>y>>d;
L=sqrt(x*x+y*y);
printf("%.8lf\n",r*(asin((L+d)/r)-asin((L-d)/r)));
}
return 0;
}