[LightOJ1038] Race to 1 Again
传送门:>出错啦<
题意:给你一个整数n,每一次可以随机选择一个n的因子x(包括1和它自己),让n除以x——不停重复此过程,直到n==1. 问n被除到1的期望次数。
解题思路:
今天刚学的期望Dp,这道题就算入门啦,顺带总结一下期望Dp的做题方法。
一般的,我们可以设$f[i]$表示从状态i到目标状态的期望次数。因此我们可以先确定本题的目标状态——n变为1. 因此在本题中,我们可以设$f[i]$表示$n==i$时到$n==1$的期望次数。由于目标状态本身到目标状态是根本不用变的,因此先确定$f[1] = 1$
于是由于最小的已经确定了,我们可以从1开始推:由小的来确定大的。因此我们可以枚举i,再枚举i的所有因子。设i的因子为$a_1, a_2, ..., a_m$,则有:$$f[i] = \frac{f[a_1] + f[a_2] + ... + f[a_m]}{m} + 1$$
即f[i]可以通过除一次来得到所有的这些因子(是得到这些因子,并不是除掉,想一想为什么),因此$f[i]$变成1的期望就是它变成的所有这些因子的期望的平均值,再加上本次的这个1.
然而很快会发现,$a_m = i$,$f[i]$总不可能用自己来转移自己吧……因此我们需要对方程进行变形
一般处理期望这些问题的用得都是实数,所以可以当代数式来做:
两边同时乘以$m$,$$f[i] * m = f[a_1] + f[a_2] + ... + f[i] + m$$ $$f[i] * (m - 1) = f[a_1] + f[a_2] + ... + f[a_{m-1}] + m$$ $$f[i] = \frac{f[a_1] + f[a_2] + ... + f[a_{m-1}] + m}{m - 1}$$
Code
要注意的是,直接$O(n^2)$枚举会超时,所以我们可以$O(n\sqrt{n})$,再$O(\sqrt{n})$的时间内搞出所有因子——特判一下完全平方数即可
/*By QiXingzhi*/
#include <cstdio>
#include <cmath>
#include <queue>
#define r read()
#define Max(a,b) (((a)>(b)) ? (a) : (b))
#define Min(a,b) (((a)<(b)) ? (a) : (b))
using namespace std;
typedef long long ll;
const int INF = ;
inline int read(){
int x = ; int w = ; register int c = getchar();
while(c ^ '-' && (c < '' || c > '')) c = getchar();
if(c == '-') w = -, c = getchar();
while(c >= '' && c <= '') x = (x << ) +(x << ) + c - '', c = getchar();
return x * w;
}
int T,Case,N;
double f[];
inline void Solve(int N){
f[] = 0.0;
double m = 0.0, K = 0.0;
double flg = -1.0;
for(int i = ; i <= N; ++i){
K = 0.0;
m = 0.0;
flg = -1.0;
for(int j = ; j <= floor(sqrt(i)); ++j){
if(i % j == ){
m += 1.0;
K += f[j];
if(i % (i/j) == ){
m += 1.0;
K += f[i/j];
if(i/j == j){
flg = f[j];
}
}
}
}
if(flg != -1.0){
K -= flg;
m -= 1.0;
}
f[i] = (double)(K + m) / (double)(m - );
}
}
int main(){
Solve();
T = r;
while(T--){
N = r;
++Case;
printf("Case %d: %.8lf\n",Case, f[N]);
}
return ;
}
[LightOJ1038] Race to 1 Again的更多相关文章
- [算法]概率与期望DP
前言 前两节主要针对题目分析,没时间的珂以跳过. 初步 首先举一道简单.经典的好题: [Lightoj1038]Race to 1 Again 懒得单独写,安利一下DennyQi同学的博客:https ...
- LightOJ - 1038 Race to 1 Again —— 期望
题目链接:https://vjudge.net/problem/LightOJ-1038 1038 - Race to 1 Again PDF (English) Statistics Foru ...
- Promise.race
[Promise.race] 返回最先完成的promise var p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 5 ...
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- 【BZOJ-2599】Race 点分治
2599: [IOI2011]Race Time Limit: 70 Sec Memory Limit: 128 MBSubmit: 2590 Solved: 769[Submit][Status ...
- hdu 4123 Bob’s Race 树的直径+rmq+尺取
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Probl ...
- Codeforces Round #131 (Div. 2) E. Relay Race dp
题目链接: http://codeforces.com/problemset/problem/214/E Relay Race time limit per test4 secondsmemory l ...
- 【多线程同步案例】Race Condition引起的性能问题
Race Condition(也叫做资源竞争),是多线程编程中比较头疼的问题.特别是Java多线程模型当中,经常会因为多个线程同时访问相同的共享数据,而造成数据的不一致性.为了解决这个问题,通常来说需 ...
- 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 ...
随机推荐
- 前端自动化 shell 脚本命令 与 shell-node 脚本命令 简单使用 之 es6 转译
(背景: 先用 babel 转译 es6 再 用 browserify 打包 模块化文件,来解决浏览器不支持模块化 )(Browserify是一个让node模块可以用在浏览器中的神奇工具) 今天折腾了 ...
- LCT维护删除时间最晚生成树
用来做动态图问题. 维护一棵删除时间最晚的生成树,这样好处是加入一条非树边时可以直接判断加还是不加,没有现在不加入而之后再加入的情况.要是我比你先被删,那我就完全没必要加.否则你现在就可以被删除掉.
- Day9 Python基础之函数基础(七)
参考链接:https://www.cnblogs.com/yuanchenqi/articles/5828233.html 1.函数的定义 定义: 函数是指将一组语句的集合通过一个函数名封装起来,要想 ...
- MySQL和Oracle的区别
由于SQL Server不常用,所以这里只针对MySQL数据库和Oracle数据库的区别 (1) 对事务的提交 MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写 ...
- Velocity之初印象
Velocity 模板引擎介绍 在现今的软件开发过程中,软件开发人员将更多的精力投入在了重复的相似劳动中.特别是在如今特别流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加 ...
- 优化CSS重排重绘与浏览器性能
关于CSS重排和重绘的概念,最近看到不少这方面的文章,觉得挺有用,在制作中考虑浏览器的性能,减少重排能够节省浏览器对其子元素及父类元素的重新渲染:避免过分的重绘也能节省浏览器性能:优化动画,使用3D启 ...
- 用 Python 写一个多进程兼容的 TimedRotatingFileHandler
我前面有篇文章已经详细介绍了一下 Python 的日志模块.Python 提供了非常多的可以运用在各种不同场景的 Log Handler. TimedRotatingFileHandler 是 Pyt ...
- Java 基础类型 默认值
(1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.
- 错误:org.apache.catalina.LifecycleException: Protocol handler start failed
org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connect ...
- Linux下 rewrite_mod 的配置
以下使用最新的 Ubuntu 16.04 测试; 安装好apache后先确认有没有rewrite模块,大多数情况下是有的:ls /etc/apache2/mods-available |grep re ...