wust1592期望

题目大意:

n个点,每个点得分概率为p,连续x个得分点的总得分为1+2+3+..+x,求n个点总得分的期望

解法

  E(n)=1*p^n+2*p^(n-1)+...+n*p

在用错位相减法求出结果为:

E(n) = (p^(n+2) - (n + 1)p^2 + nP) / (p-1)^2

特判p = 1的情况。


#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <iomanip>

using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define maxn 200005
#define MOD 1000000007
#define mem(a , b) memset(a , b , sizeof(a))
#define LL long long
#define ULL long long
const long long INF=0x3fffffff;
int m ;
double p;

double quick_mod(double n , int m )
{
    double res = 1;
    while(m)
    {
        if(m&1) res *= n;
        n *= n;
        m >>= 1;
    }
    return res;
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        scanf("%d %lf" , &m , &p);
        double res = 0;
        if(p == 1) res = 1.0*(m + 1) * m / 2;
        else
        {
            res = quick_mod(p , m + 2) - p *p * (m + 1) + p * m;
            res = res /((1.0-p)*(1.0-p));
        }
        printf("%.6lf\n" , res);
    }
    return 0;
}


你可能感兴趣的:(wust1592期望)