需要知道的知识:
分3种情况讨论:
第一种情况
输入的\(S\)是大于\(a\times b\)的,那么这个概率就是0%。
第二种情况
如果输入的\(S\)太小了,无限接近于0的话,那么概率就无限接近100%(良心出题人,没有卡这里的精度,如果再卡卡就要弄死我了)
第三种情况
也就是一般的情况
这里需要一些基础的初中数学知识来帮我们计算这个概率。
具体思路:
所以我们要来搞搞喜闻乐见的定积分计算了
函数\(y=\frac{S}{x}\)是个反比例函数,也即双曲线函数。之前说过了,我们只讨论在第一象限内的玩意。
由于反比例函数的性质,我们容易知道,这个函数与矩阵的交点在\((\frac{S}{b},b)\),然后这个玩意的左边那个矩形的高是\(a\),所以我们应该在\([\frac{S}{b},a]\)这个范围内对函数\(y=\frac{S}{x}\)进行积分.
scw曾经不知天高地厚地背过积分表,然后……就用上了啊
推式子:
\(\text{下边的面积}=S+S\times \int_{\frac{S}{b}}^{a}\frac{1}{x}\,dx\)
\(\;\;\;\;\;\,\;\;\;\;\;\;\;\;\;\;\;\;\;\,=S+S\times (\ln a-\ln \frac{S}{b})\)
//记得这个\(\int\frac{1}{x}\,dx=\ln x\),然后套上牛顿--莱布尼兹公式
\(\;\;\;\;\;\,\;\;\;\;\;\;\;\;\;\;\;\;\;\,=S+S\times (\ln \frac{ab}{S})\)
//\(\ln\)的性质
\(\;\;\;\;\;\,\;\;\;\;\;\;\;\;\;\;\;\;\;\,=S\times (1+\ln \frac{ab}{S})\)
\(\;\;\;\;\;\,\;\;\;\;\;\;\;\;\;\;\;\;\;\,=S\times (1+\ln \frac{ab}{S})\)
\(Answer=\frac{\text{上面的面积}}{\text{总面积}}\)
\(\;\;\;\;\;\;\;\;\;\;\;\;\;\,=\frac{\text{总面积-下面的面积}}{\text{总面积}}\)
\(\;\;\;\;\;\;\;\;\;\;\;\;\;\,=\frac{ab-S\times (1+\ln \frac{ab}{S})}{ab}\)
然后?没了啊,就是这个基础的积分。如果没背过积分表的人可以用自适应辛普森算法(题解区里好像有人写?菜鸡的我不会……哭卿卿)
#include <bits/stdc++.h>
using namespace std;
int n;
double a,b,s;
int main()
{
cin>>n;
while(n--)
{
cin>>a>>b>>s;
if(s>a*b) cout<<"0.000000%"<<endl;
else if(s<0.001) cout<<"100.000000%"<<endl;
else
{
double ans=100.0*(a*b-s*(1+log(a*b/s)))/a/b;
printf("%.6lf",ans);
cout<<"%"<<endl;
}
}
return 0;
}
(很好奇为啥第一篇题解是printf的%啊,多麻烦,敲俩%,cout只要敲一个%,剩下一个去%管理员去不好吗)
qwq就是这样子辣,喵喵喵(概率论真是很可爱呢)
原文:https://www.cnblogs.com/oierscw/p/12722177.html