1 条题解

  • 0
    @ 2025-10-8 17:05:45

    f[i][0/1]表示前i个珠子,最后一个珠子和第一个是否相同(0不同,1相同)的期望值

    这样可以 比较容易地 得到一个n^2的转移

    p[i]表示i个珠子的颜色都相同的概率

    至于统计答案

    ans=p[n]*n表示环上只有一种颜色

    for(int i=1;i<n;i++)ans+=iif[n-i][0]*p[i]

    这步是枚举第一珠子所在连续段长度,相当于n个位置里,有i个位置是第一珠子所在连续段,故长度i共有i种摆法

    #include<bits/stdc++.h>
    using namespace std;
    double ans,p[205],f[205][2];
    int main()
    {
    	int n,m;scanf("%d%d", &n, &m);
    	p[1]=1;for(int i=2;i<=n;i++)p[i]=p[i-1]*1/m;
    	
    	f[0][1]=1;
    	for(int i=0;i<=n;i++)
    		for(int j=i+1;j<=n;j++)
    		{
    			f[j][0]+=(j-i)*p[j-i]*f[i][0]*(m-2)/m;
    			f[j][0]+=(j-i)*p[j-i]*f[i][1]*(m-1)/m;
    			f[j][1]+=(j-i)*p[j-i]*f[i][0]*1/m;
    		}
    	ans=p[n]*n;
    	for(int i=1;i<n;i++)
    		ans+=i*i*f[n-i][0]*p[i];
    	printf("%.5lf",ans);
    	return 0;
    }
    
    • 1

    信息

    ID
    3866
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者