zoukankan      html  css  js  c++  java
  • HDU4652:Dice

    题面

    传送门

    题意

    (m)面的骰子
    求连续出现(n)个相同面的期望次数
    或者
    求连续出现(n)个不同面的期望次数

    Sol

    (f[i])表示已经出现了(i)~(n)这些面相同的期望次数
    (g[i])(i)~(n)这些面不同的期望次数
    那么显然有

    [f[i]=frac{1}{m}f[i+1]+frac{m-1}{m}f[1]+1 ]

    [f[n]=0 ]

    [g[i]=frac{m-i}{m}g[i+1]+frac{1}{m}sum_{j=1}^ig[j]+1 ]

    [g[n]=0 ]

    然后差分一下即错位相减
    就可以求出相邻两段的差值的关系
    (f[1]-f[0]=1)(g[1]-g[0]=1)
    就可以推出来所有的东西了

    # include <bits/stdc++.h>
    # define RG register
    # define IL inline
    # define Fill(a, b) memset(a, b, sizeof(a))
    using namespace std;
    typedef long long ll;
    
    int T, op;
    double n, m;
    
    IL void Calc1(){
    	RG double tp = 1, ans = 0;
    	for(RG int i = 1; i <= n; ++i) ans += tp, tp *= m;
    	printf("%.10lf
    ", ans);
    }
    
    IL void Calc2(){
    	RG double tp = 1, ans = 0;
    	for(RG int i = 1; i <= n; ++i) ans += tp, tp *= m / (m - i);
    	printf("%.10lf
    ", ans);
    }
    
    int main(RG int argc, RG char *argv[]){
    	while(scanf("%d", &T) != EOF){
    		for(RG int i = 1; i <= T; ++i){
    			scanf("%d%lf%lf", &op, &m, &n);
    			!op ? Calc1() : Calc2();
    		}
    	}
        return 0;
    }
    
    
  • 相关阅读:
    PHP之目录遍历
    PHP之验证码
    PHP之验证码
    PHP之异常处理模式
    PHP之pdo的预处理模式
    PHP之PDO
    PHP之cookie和session
    PHP之MVC
    单例模式
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/8669665.html
Copyright © 2011-2022 走看看