Keiichi Tsuchiya el Rey de la Deriva

A --Keiichi Tsuchiya el Rey de la Deriva

Enlace del tema: Jie Suanke

responder

Hay dos situaciones: la primera: la curva puede acomodar completamente el rectángulo; la segunda: la curva no puede acomodar completamente el rectángulo.

El primero es relativamente simple y el teorema de Pitágoras puede obtener el resultado.

El segundo método debe ser cuidadoso. El problema es el ancho de la curva. Según el primer método, el resultado será relativamente grande, por lo que debe restar una pequeña cantidad de exceso.

El método específico se muestra en la figura:
Primer caso
Segundo caso

Código AC

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>

using namespace std;
//#pragma GCC optimize(2)
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ull unsigned long long
#define ll long long
#define rep(i, x, y) for(int i=x;i<=y;i++)
#define mms(x, n) memset(x, n, sizeof(x))
#define mmc(A, tree) memcpy(A, tree, sizeof(tree))
#define INF (0x3f3f3f3f)
#define mod (ull)(1e9+7)
const double PI = (acos(-1.0));
typedef pair<int, int> P;

int main() {
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    int T;
    scanf("%d", &T);
    double a, b, r, d;
    while (T--) {
        scanf("%lf%lf%lf%lf", &a, &b, &r, &d);
        double dd = d * PI / 180.0;
        double w = sqrt(((a + r) * (a + r)) + b * b);
        double t = acos((a + r) / w);
        if (t - dd <= 0) {
            printf("%.12f\n", w - r);
        } else {
            double tt = (t - dd);
            double c = 2 * w * sin(tt / 2);
            tt = (PI - tt) / 2;
            double p = c * cos(tt);
            printf("%.12f\n", w - p - r);
        }
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45934120/article/details/108134526
Recomendado
Clasificación