lightoj1038

 1 //Accepted    2860 KB    16 ms
 2 //概率
 3 //对于n,假设n变成1的期望步数为p(n)
 4 //则p(n)=1/t*sum((1+p(d))) d|n
 5 //解得:p(n)=1/(t-1)*(t+sum(p(d))) d|n d!=n;
 6 //下面我们可以改造筛素数的方法,对于每个d,看他整除那些数
 7 #include <cstdio>
 8 #include <cstring>
 9 #include <iostream>
10 #include <queue>
11 #include <cmath>
12 #include <algorithm>
13 using namespace std;
14 /**
15   * This is a documentation comment block
16   * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
17   * @authr songt
18   */
19 const int imax_n = 100005;
20 double f[imax_n];
21 int t[imax_n];
22 void pre()
23 {
24     for (int i=0;i<imax_n;i++)
25     {
26         f[i]=1;
27         t[i]=1;
28     }
29     f[1]=0;
30     for (int i=2;i<imax_n-4;i++)
31     {
32         f[i]=(f[i]+1)/t[i];
33         for (int j=2*i;j<imax_n-4;j+=i)
34         {
35             f[j]+=1+f[i];
36             t[j]++;
37         }
38     }
39 }
40 int n;
41 int main()
42 {
43     pre();
44     int T;
45     int t=0;
46     scanf("%d",&T);
47     while (T--)
48     {
49         scanf("%d",&n);
50         printf("Case %d: %.6lf\n",++t,f[n]);
51     }
52     return 0;
53 }

时间: 2024-12-17 12:44:53

lightoj1038的相关文章

lightoj1038(数学概率与期望)

题意: 给出一个数字D 我们可以选择1-D中可以被D整除的数字,然后用D出得到一个新的数字D1: 然后在找所有D1的因子,用D1除,直到得到1: 问除的次数的期望值: 思路: d[i] 代表从i除到0的期望步数:那么假设i一共有c个因子(包括1和本身) d[i] = ( d[1] + d[a2] + d[a3] + d[a4] ..... + d[i] + c) / c; (加c是因为每一个期望值都会加1,因为多出一步才变成它) 把右边的d[i]移到左边就是: ( (c - 1) / c ) *

lightoj1038(期望dp)

给定一个数字d,随机选择一个d的约数,然后让d除以这个约数,形成新的d,不断继续这个步骤,知道d=1为止, 要我们求将d变为1的期望次数 设d1,d2...dj是除以约数后,形成的行的d,且dj==d 那么dp[i] = 1/j*dp[d1] + 1/j*dp[d2]+...+1/j*dp[dj] + 1 (j-1)/j*dp[i] = 1/j*dp[d1] + 1/j*dp[d2]+...+1/j*dp[dj-1] + 1 所以dp[i] = (1/j*dp[d1] + 1/j*dp[d2]+

Lightoj1038 概率dp + 因数分解

Problem: 给你一个数n(n<=105),n的因数集合为K(包括自身),每次从K中选择一个数d来除以n,让n变成 n/d,然后把n/d当作新的n来递归的操作,直到变成1,问你变成1的期望操作步数是多少? Analyse: 令dp[i]表示把i变成1的期望步数,Z表示i的因数个数,有方程: dp[i]=1z∑j=1...n 且 n%i==0(dp[j]+1)+1z?(1+dp[i]) 方程化简为递推式子,然后dp即可. /**********************jibancanyang*

[算法]概率与期望DP

前言 前两节主要针对题目分析,没时间的珂以跳过. 初步 首先举一道简单.经典的好题: [Lightoj1038]Race to 1 Again 懒得单独写,安利一下DennyQi同学的博客:https://www.cnblogs.com/qixingzhi/p/9346307.html. 很显然很多期望题的状态是和自己有关的,怎么办呢,难道不停的搜索自己? 上面的方法显然行不通,于是我们只能简单变形一下. 很容易列出方程: \[f[n]= \frac{\sum_{i=1}^{m}f[fac_n^