1. 程式人生 > >杭電2018多校第六場(2018 Multi-University Training Contest 6) 1001.oval-and-rectangle (HDU6362)-數學期望、微積分

杭電2018多校第六場(2018 Multi-University Training Contest 6) 1001.oval-and-rectangle (HDU6362)-數學期望、微積分

style 草稿 隊友 training sin con queue turn .com

2018 Multi-University Training Contest 6

6362.oval-and-rectangle

題意就是橢圓裏畫內接矩形,問你矩形周長的期望。

比賽的時候推了公式,但是草稿紙丟了,直接看代碼吧,和官方題解的公式有點不一樣,但是有官方題解就差不多了。

註意:acos(-1.0)=asin(1.0)=π,其他的就沒了,具體的怎麽推的也懶得再推一遍了。

比賽的時候,我推的公式,隊友算期望,忘了/b,一直不對,後來寫上ans/=b;過了。。。

官方題解:

技術分享圖片

代碼:

 1 //1001-6362-概率-微積分
 2 #include<iostream>
 3
#include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<bitset> 7 #include<cassert> 8 #include<cctype> 9 #include<cmath> 10 #include<cstdlib> 11 #include<ctime> 12 #include<deque> 13 #include<iomanip> 14 #include<list> 15
#include<map> 16 #include<queue> 17 #include<set> 18 #include<stack> 19 #include<vector> 20 using namespace std; 21 typedef long long ll; 22 23 const double PI=acos(-1.0); 24 const double eps=1e-6; 25 const ll mod=1e9+7; 26 const int inf=0x3f3f3f3f; 27 const int maxn=1e5+10
; 28 #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 29 30 double a,b; 31 double solve(double c) 32 { 33 return (b*b/2)*(asin(c/b)+(c/(b*b))*sqrt(b*b-c*c))*a/b; 34 } 35 int main() 36 { 37 int t; 38 cin>>t; 39 while(t--) 40 { 41 cin>>a>>b; 42 double ans1=solve(b)-solve(0); 43 double ans2=0.5*b*b; 44 double ans=4.0*(ans1+ans2)/b; 45 ans-=(double)5e-7; 46 printf("%.6f\n",ans); 47 } 48 }

溜了。

杭電2018多校第六場(2018 Multi-University Training Contest 6) 1001.oval-and-rectangle (HDU6362)-數學期望、微積分