@994495jj
2017-09-26T12:12:00.000000Z
字数 1009
阅读 1018
201708 (ACM)计算几何----圆反演

#include<bits/stdc++.h>using namespace std;typedef double db;const db eps=1e-13;const db pi=acos(-1);const int N=15;int r1,r2,n;db k1,k2,ki,kii;db k[N];int main() {int T;scanf("%d",&T);while(T--) {scanf("%d%d%d",&r1,&r2,&n);if(r1<r2) swap(r1,r2);k1=-1.0/r1;k2=1.0/r2;db ans=0,r=0;rep(i,1,n+1) {if(i==1) {r=r1-r2;k[1]=1/r;} else if(i%2==0) {if(i==2) {k[2]=k1+k2+k[1];r=1/k[2];} else if(i==4) {k[4]=2*(k1+k2+k[2])-k[1];r=1/k[4];ki=k[2];kii=k[4];} else {db tk=2*(k1+k2+kii)-ki;r=1/tk;ki=kii;kii=tk;}}if(r*r<eps) break;ans=ans+r*r;}printf("%.5f\n",ans*pi);}return 0;}
