@994495jj
2017-08-22T12:24:58.000000Z
字数 914
阅读 714
201708 (ACM)计算几何----圆反演
#include<bits/stdc++.h>using namespace std;#define fi first#define se second#define pb push_back#define sz(a) (int)a.size()#define mp make_pair#define rep(i, a, b) for(int i=(a); i<(b); i++)#define de(a) cout<<#a<<"="<<a<<endl;typedef long long ll;typedef double db;typedef pair<int, int> pii;typedef vector<int> vi;//--------const db eps=1e-13;const db pi=acos(-1);int r1,r2,n;struct P {db x,y;P() {}P(db x,db y) {this -> x = x;this -> y = y;}P operator - (const P &c) const {return P(x - c.x, y - c.y);}};db dis(P a) {return sqrt(a.x*a.x+a.y*a.y);}db dis(P a,P b) {return dis(a-b);}db gao(db x) {return 1/x;}int main() {int T;scanf("%d",&T);while(T--) {scanf("%d%d%d",&r1,&r2,&n);if(r1<r2) swap(r1,r2);db x1=gao(2*r1),x2=gao(2*r2);db d=x2-x1;db ans=0,r=0;P o = P(0, 0);rep(i,1,n+1) {if(i==1) {r=r1-r2;} else if(i%2==0) {P c = P(x1+d/2, d*i/2);db dc = dis(c, o);db da=dc-d/2,d_=dc+d/2;db a=gao(da),b=gao(d_);r=fabs(a-b)/2;}ans+=r*r;if(r*r<eps) break;}printf("%.5f\n",ans*pi);}return 0;}
