hdu 6158 The Designer

题解 

精度还是卡的很厉害.....,改成1e-12也会wa

#include"bits/stdc++.h"
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-13;

double sqr(double x) {
    return x*x;
}
int main() {
#ifdef LOCAL
    freopen("input.txt","r",stdin);
#endif // LOCAL
    int T,n;
    double r1,r2;
    scanf("%d",&T);
    while(T--) {
        scanf("%lf%lf",&r1,&r2);
        scanf("%d",&n);
        if(r1 < r2) swap(r1,r2);
        double r3 = r1-r2;
        double ans = r3*r3;

        double R = 2*r1;
        double l1 = R, l2 = sqr(R)/(2*r2);
        double r = (l2-l1)/2;
        for(int i = 1, j = 2; i < n; i+=2, j+=2) {
            double t = sqrt(sqr(R+r) + sqr(j*r));
            double p1 = t-r, p2 = t+r;
            double rr = (sqr(R)/p1 - sqr(R)/p2)/2;
            double s = rr*rr;
            if(s < eps) break;
            if(i+1 == n) ans += s;
            else ans += 2*s;
        }
        printf("%.5f\n",ans*PI);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_18869763/article/details/82258837