题目链接

题意:

  给一个数n, 每次操作是随机的选择一个[1,N]区间内能够被n整除的数进行除法, 然后得到一个新的n。

  问n变成1时的期望操作次数。

    

思路:

  设E[n] 为 当数为x时, 变成 1 期望的次数, 则有转移方程。

  E[n] = sigma E[n / x[i]] / k + 1(x[i] 为能被n被整除的数), k为n在区间[1,n]能被n整除的个数。

  化简:E[n] = E[n] / k + sigma E[n / x[i]] / k + 1

        = k * (sigmaE[n / x[i]] / k + 1) / (k - 1)

        = (sigmaE[n / x[i]] + k) / (k - 1)。

代码:

  

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <set>
#include <map>
#include <list>
#include <queue>
#include <string>
#include <vector>
#include <fstream>
#include <iterator>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define MAXN 100010
#define MOD 1000000007
#define eps 1e-6
int n;
double f[MAXN];
bool vis[MAXN];
vector <int> g[MAXN];
void init()
{
for(int i = ; i < MAXN; i ++)
for(int j = ; j * i < MAXN; j ++)
g[j * i].push_back(i); f[] = ;
memset(vis, false, sizeof(vis));
}
double dp(int x)
{
if(x == ) return 0.0;
if(vis[x]) return f[x];
vis[x] = true;
double& ans = f[x];
ans = 0.0;
for(int i = ; i < g[x].size(); i ++)
ans += dp(x/g[x][i]);
ans += (g[x].size() + 1.0);
ans /= g[x].size();
return ans;
} int main()
{
int T;
int kcase = ;
init();
scanf("%d", &T);
while(T --)
{
scanf("%d", &n);
printf("Case %d: %.7lf\n", ++ kcase, dp(n));
}
return ;
}

LightOJ_1038 Race to 1 Again的更多相关文章

  1. Promise.race

    [Promise.race] 返回最先完成的promise var p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 5 ...

  2. golang中的race检测

    golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...

  3. 【BZOJ-2599】Race 点分治

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBSubmit: 2590  Solved: 769[Submit][Status ...

  4. hdu 4123 Bob’s Race 树的直径+rmq+尺取

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Probl ...

  5. Codeforces Round #131 (Div. 2) E. Relay Race dp

    题目链接: http://codeforces.com/problemset/problem/214/E Relay Race time limit per test4 secondsmemory l ...

  6. 【多线程同步案例】Race Condition引起的性能问题

    Race Condition(也叫做资源竞争),是多线程编程中比较头疼的问题.特别是Java多线程模型当中,经常会因为多个线程同时访问相同的共享数据,而造成数据的不一致性.为了解决这个问题,通常来说需 ...

  7. Codeforces Round #328 (Div. 2) C. The Big Race 数学.lcm

    C. The Big Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/592/probl ...

  8. HDU 4123 Bob’s Race 树的直径 RMQ

    Bob’s Race Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=41 ...

  9. [LOJ 1038] Race to 1 Again

    C - Race to 1 Again Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu D ...

随机推荐

  1. Microsoft SyncToy 文件同步工具

    Microsoft SyncToy SyncToy 是由 微软 推出的一款免费的文件夹同步工具.虽然名字中有一个 Toy,但是大家可千万不要误以为它的功能弱爆了.实际上,我感觉这款软件还真是摆脱了微软 ...

  2. [转]开源应用架构之asterisk

    作者:Russell Bryant 翻译:jiazhengfeng Asterisk[1]是一款GPLv2协议下的开源电话应用平台.简单来说,Asterisk是一个服务器应用,能够完成发起电话呼叫.接 ...

  3. LayoutInflater的inflate函数用法

    LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...

  4. iOS CoreData (1)

    下面开始学习一下CoreData. Core Data不是一个关系型数据库,也不是关系型数据库管理系统(RDBMS). Core Data 为数据变更管理.对象存储.对象读取恢复的功能提供了支持. 它 ...

  5. .net mvc 发布部署到机器上

    这样会自动在C:\Inetpub\wwwroot 会出现这个文件夹. 上述步骤都是在安装了 VS2010.MVC3.0和的电脑上操作的 接下来进行服务器的部署 :1. 安装Microsoft .net ...

  6. C#磁盘遍历——递归

    static void Main(string[] args) { //创建秒表,记录查询的总时间 Stopwatch timer = new Stopwatch(); timer.Start(); ...

  7. sql脚本的格式

    创建表前先判断是否存在 IF OBJECT_ID(N'TableDataDictionary') IS NULL 存储过程头:--=================================== ...

  8. 如何:确定调用 ASP.NET 网页的方式

    如何:确定调用 ASP.NET 网页的方式 通常有必要了解调用 ASP.NET 网页的方式:是由原始请求 (HTTP GET).回发 (HTTP POST).来自其他页的跨页面发送 (HTTP POS ...

  9. 应用程序中小红点设置方法 (ios)

    我们的手机上常常会看到软件的右上角出现小红点,上面显示着你未读的消息数.下面是设置小红点的方法. 1.tabBar上按钮的小红点      因为小红点代表你未读的消息数,所以这个小红点上的数据不是凭空 ...

  10. SQL反模式部分内容笔记

    规范化: 1, 以一种我们能够理解的方式表达这个世界中的事物; 2, 减少数据冗余存储, 防止异常或者不一致的数据; 3, 支持完整性约束.  Tips: 提高数据的性能不在此列表中. 意义: 规范化 ...