P5516-[MtOI2019]小铃的烦恼【期望dp,线性消元】
正题
题目链接:https://www.luogu.com.cn/problem/P5516
题目大意
nnn个字母的一个字符串,每次随机选取两个不同的位置(x,y)(x,y)(x,y)让第xxx个位置的字符变成第yyy个位置的字符。
求期望多少次能够把所有字符变成同一个。
解题思路
因为最终状态很多,所以我们考虑枚举最终状态,我们称之为目标状态。
设pip_ipi表示目标状态的字符有iii个时,该状态变为最终状态的概率,那么有pi=i(n−i)n(n−1)pi−1+n(n−1)−2i(n−i)n(n−1)+i(n−i)n(n−1)pi+1⇒pi=pi−1+pi+12p_i=\frac{i(n-i)}{n(n-1)}p_{i-1}+\frac{n(n-1)-2i(n-i)}{n(n-1)}+\frac{i(n-i)}{n(n-1)}p_{i+1}\Rightarrow p_i=\frac{p_{i-1}+p_{i+1}}{2}pi=n(n−1)i(n−i)pi−1+n(n−1)n(n−1)−2i(n−i)+n(n−1)i(n−i)pi+1⇒pi=2pi−1+pi+1
我们观察一下这个式子,其实等价于pi−pi−1=pi+1−pip_i-p_{i-1}=p_{i+1}-p_{i}pi−pi−1=pi+1−pi表示ppp是一个等差数列,而p0=0,pn=1p_{0}=0,p_{n}=1p0=0,pn=1所以pi=inp_i=\frac{i}{n}pi=ni
然后设fif_ifi表示目标状态有iii个且是最终状态的情况下到达最终状态的期望步数,而因为 数学期望=概率×步数 ,和 单次期望=1单次概率\frac{1}{单次概率}单次概率1
所以我们成功造成一次变化的期望次数是12i(n−i)n(n−1)\frac{1}{\frac{2i(n-i)}{n(n-1)}}n(n−1)2i(n−i)1,又因为多和少的概率是相等的,所以有方程
fipi=pin(n−1)2i(n−i)+pi+1fi+1+pi−1fi−12f_ip_i=p_i\frac{n(n-1)}{2i(n-i)}+\frac{p_{i+1}f_{i+1}+p_{i-1}f_{i-1}}{2}fipi=pi2i(n−i)n(n−1)+2pi+1fi+1+pi−1fi−1
因为知道pi=inp_i=\frac{i}{n}pi=ni所以直接带进去解出来就有
fi=n(n−1)2i(n−i)+i−12ifi−1+i+12ifi+1f_i=\frac{n(n-1)}{2i(n-i)}+\frac{i-1}{2i}f_{i-1}+\frac{i+1}{2i}f_{i+1}fi=2i(n−i)n(n−1)+2ii−1fi−1+2ii+1fi+1
换一个方式表达就是
(−i−12ifi−1)+(fi)+(−i+12ifi+1)=n(n−1)2i(n−i)(-\frac{i-1}{2i}f_{i-1})+(f_i)+(-\frac{i+1}{2i}f_{i+1})=\frac{n(n-1)}{2i(n-i)}(−2ii−1fi−1)+(fi)+(−2ii+1fi+1)=2i(n−i)n(n−1)
又有fn=0f_n=0fn=0
这样问题就变成了n−1n-1n−1个线性方程的方程组,因为每个方程组只有三个元,高斯消元会有大量多余步骤,所以我们直接手动先消掉fi−1f_{i-1}fi−1再返回来消掉fi+1f_{i+1}fi+1就好了。
时间复杂度O(n)O(n)O(n)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2100;
int n,num[26];
double f[N],a[N],ans;
char s[N];
int main()
{scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;i++)num[s[i]-'A']++;for(int i=1;i<=n;i++)f[i]=n*(n-1)/(2.0*i*(n-i));a[1]=1;for(int i=1;i<n;i++){double r=-(i+1)/(2.0*i),l=-i/(2.0*(i+1));double k=-l/a[i];f[i+1]+=f[i]*k;a[i+1]=1+k*r;}f[n]=0;for(int i=n-1;i>=1;i--){double r=-(i+1)/(2.0*i);f[i]-=f[i+1]*r,f[i]=f[i]/a[i];}for(int i=0;i<26;i++)ans+=num[i]*f[num[i]]/(double)n;printf("%.1lf\n",ans);
}
P5516-[MtOI2019]小铃的烦恼【期望dp,线性消元】相关推荐
- LightOJ 1151 Snakes and Ladders (期望DP + 高斯消元)
Description 'Snakes and Ladders' or 'Shap-Ludu' is a game commonly played in Bangladesh. The game is ...
- ICPC 2005 hangzhou Generator (UVA1358)KMP + 期望DP / 高斯消元
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Generator Weblink https://www.luogu.com.cn/problem/ ...
- P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为nnn,剩余hphphp点生命,然后每个时刻如果生命值没有满那么有1m+1 ...
- 【BZOJ1778】[Usaco2010 Hol]Dotp 驱逐猪猡 期望DP+高斯消元
[BZOJ1778][Usaco2010 Hol]Dotp 驱逐猪猡 Description 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300 ...
- 【BZOJ2337】XOR和路径,概率期望DP+高斯消元
Time:2016.08.27 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 与游走思路有一定相似的地方 对答案的每一位进行判断 通过高斯消元解出每个点到n xor路径为1的概率 ...
- BZOJ 1778 Usaco2010 Hol Dotp 驱逐猪猡 期望DP+高斯消元
题目大意:给定一个无向图,炸弹从1号节点出发,每个时刻有P/Q的概率爆炸,如果某个时刻没有爆炸,就会等概率沿着随机一条出边走到下一个城市,求最终每个城市的爆炸概率 #include <cmath ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...
- BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】
题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
最新文章
- Js + Css的msn式的popup提示窗口的实现
- poj-1031-fence(不是我写的,我只是想看着方便)
- .net之生成图表的控件(柱状图,曲线图,饼状图) [转]
- Python之二叉树的遍历
- 卷积神经网络的网络层与参数的解析
- oracle学习篇一:sqlplus常用命令
- 战神笔记本电脑自带access吗_书评:6本二次元小说,每一本都很有想象力,你都读过吗?...
- 情怀再次输给现实!中国式星巴克,如今亏到连租金都交不起
- Java面试常问基础知识(持续更新)
- java+mysql实现图书管理系统
- verilog学习笔记——三段式状态机
- Ubuntu安装腾达u12驱动
- “磁碟机”病毒详尽分析报告
- Android桌面插件系列
- LaTex论文排版 | (30) 三线表
- win10系统无法打开计算器等应用解决办法
- python 英语词典_使用Python的英语词典应用程序
- 宝塔 7.9.2 宝塔控制面板绕过 手机绑定认证 绕过官方认证
- Java 3DES加密解密(Commons.Codec Base64)
- Worthington公司弹性蛋白酶研究:分子特征和应用
热门文章
- php上传预览源码,php批量上传五[带预览]-PHP源码
- 10玩rust_C++工程师的Rust迁移之路(5)- 继承与组合 - 下
- 怎样安装php52-71,CentOS如何安装PHP5和PHP7
- 开发物体识别桌、_【课程总结】AR系统开发“秘籍”大揭秘!
- linux系统刷分辨率,Linux下设置其分辨率及刷新率
- python类和函数_构建程序. Python中的类和函数
- 孕妇可以在计算机教室待吗,电脑对孕妇有辐射吗?孕妇使用电脑的注意事项
- mysql 左连接 怎么走索引_数据库索引、左连接、右连接、等值连接
- linux 用mutex定义一个linkedlist,一个高性能无锁非阻塞链表队列
- leetcode59. 螺旋矩阵 II