题目传送门

Description

有一个老司机要弯道漂移。保证车的右前方紧贴右侧车道,车身与车道相切。

求车道至少有多宽。

Solution

计算题,注意两种情况。

1.

此时答案为 $\sqrt{(a+r)^2+b^2}-r$ 。

2.

对于这种情况,暴力求出 $\Theta$ 就可以了。

Code

#include<bits/stdc++.h>
#define reg register
typedef long long ll;
using namespace std;
const int MAXN=100000+5;

int T;

const double pi=acos(-1);

int read()
{
    int ret;
    scanf("%d", &ret);
    return ret;
}

double ans;

int main(){
    T=read();
    while(T--){
        int a=read();
        int b=read();
        int r=read();
        int d=read();
        double tmp=1.0*sqrt(1.0*(a+r)*(a+r)+1.0*b*b);
        double theta=acos(1.0*(a+r)/tmp)/pi*180;
        if(theta>1.0*d){
            double qaq=theta-1.0*d;
            ans=tmp*cos(qaq/180*pi)-r;
        }
        else ans=tmp-r;
        printf("%.10lf\n",ans);
    }
    return 0;
}