题意:题目要求选择n个0~1之间的数拍完序之后第m个小于等于x的概率
思路:1~0直接选择一个数小于等于x的概率为x,那么选择i个数都小于等于x的概率为x^i。因此,要求第m个数小于等于x,我们可以知道m~n的数也有可能小于等于x,只要枚举m~n求和即可
代码:
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n , m; double x; double get(int a){ double sum = 1; int j = n; for(int i = 1 ; i <= a ; i++ , j--) sum *= j; for(int i = 1 ; i <= a ; i++) sum /= i; return sum; } double solve(){ double ans = 0; for(int i = m ; i <= n ; i++) ans += get(i)*pow(x,i)*pow(1-x,n-i); return ans; } int main(){ int cas; scanf("%d" , &cas); while(cas--){ scanf("%d%d%lf" , &n , &m , &x); printf("%.4lf\n" , solve()); } return 0; }
时间: 2024-10-03 05:52:33