Description
一个椭圆的长轴和短轴长度分别为 a,b a , b , y y 等概率取中的任意值,求该椭圆内部过纵坐标为 y y 的点的内切矩形周长的期望
Input
第一行一整数表示用例组数,每组用例输入两个整数 a,b(0<b<a<105) a , b ( 0 < b < a < 10 5 )
Output
输出周长期望,结果取小数点前六位
Sample Input
1
2 1
Sample Output
8.283185
Solution
椭圆 x2a2+y2b2=1 x 2 a 2 + y 2 b 2 = 1 上 y=c y = c 时横坐标绝对值即为 abb2−c2−−−−−−√ a b b 2 − c 2 ,那么该矩形周长即为 4(c+bab2−c2−−−−−−√) 4 ( c + b a b 2 − c 2 ) ,那么周长的期望即为 4b∫b0(c+bab2−c2−−−−−−√)dc=4b(c22+ab(c2b2−c2−−−−−−√+b22arcsin(cb)))|b0=πa+2b 4 b ∫ 0 b ( c + b a b 2 − c 2 ) d c = 4 b ( c 2 2 + a b ( c 2 b 2 − c 2 + b 2 2 a r c s i n ( c b ) ) ) | 0 b = π a + 2 b
Code
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
const double PI=acos(-1.0);
int main()
{
int T,a,b;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&a,&b);
ll ans=(ll)(1000000.0*(PI*a+2.0*b));
printf("%lld.%06d\n",ans/1000000,ans%1000000);
}
return 0;
}