2022牛客多校1 D Mocha and Railgun
题意
https://ac.nowcoder.com/acm/contest/33186/D
在圆内有一条固定中点可以旋转的定长线段,问投影在线段上的圆弧最长有多长
解法
投影之后会产生一个直角三角形,其中一条直角边等于线段长度,斜边为对应圆弧的弦(也可能没有三角形,此时弦等于线段长度)
无论如何投影,都可以先将线段投影到直径上再投影到圆上,因此,可视为线段中点在直径上活动,活动范围是圆心到线段中点本身的位置,这样永远沿着垂直于直径的方向投影。
随着线段中点离圆心越来越远,投影的弧也越来越长(画图易知),因此最远的时候就是答案
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#define ll long long
#define gc getchar
#define maxn 100005
using namespace std;
inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}ll t,r,x,y,d;
double y_1,y_2,wei,xian;
int main(){
t=read();
while(t--){
r=read();x=read();y=read();d=read();
wei=sqrt(1.0*x*x+y*y);
y_1=sqrt(1.0*r*r-(wei-d)*(wei-d));
y_2=sqrt(1.0*r*r-(wei+d)*(wei+d));
xian=sqrt(4*d*d+(y_2-y_1)*(y_2-y_1));
printf("%.12lf\n",2*asin(xian/(2*r))*r);
}
return 0;
}
所有文字著作权归本人所有,禁止转载抄袭,若盗版进行商业运营,本人必将追究到底。

浙公网安备 33010602011771号