The Swap
源程序 swap.cpp*
输入文件 swap.in
输出文件 swap.out
时间限制 1s
空间限制 256MB
【问题描述】
Alice 得到了一个整数, 她将其视作长度为 n 的字符串 S。为了好玩,她迚行了 k 次如下操作:
1) 随机选取两个不同的位置 x 和y(即每次操作, {<x, y> | 1<=x < y <=n}中每个元素都有
相同的概率被选到)
2) 交换数位 S[x]和数位 S[y]
为了自虐,在 Alice 恶搞之后,Bob 会随机一个子串(即对于任意子串都有相同概率被选到),然后
他想知道他选出的子串中各个位置数字之和的期望为多少。聪明的 Bob 想出了一个很好的方法来解决这个
问题,那就是把这个问题交给你。Bob 会告诉你 S和 k,你需要告诉他期望。
【输入格式】
一行,包含字 S和 k。
【输出格式】
一行,一个实数。当你的输出和标准答案的差距少于 10^-6 时,被认为是正确的。
【样例输入】
477 1
【样例输出】
10
【样例输入】
57268508514909598902647806463326698034850446919720257361969 7
【样例输出】
98.3238536775161
【数据范围】
对于 70%的数据 |S|<=2500,k<=1000000
对于 100%的数据 |S|<=1000000,k<=1000000
以下是题解部分。
首先,我们定义以下数组:
int a[] //储存这个字符串
int f[] //任意字符在i轮交换之后不在自己原位上的概率
int total //结果
int sum //所有字符的权值和
【疑问环节】
Q:为什么$f$是“任意字符”的不在原位概率呢?为什么不是考虑每一个字符不在原位的概率呢?
A:因为对于每一个字符,它在交换i轮之后的概率都是相等的,所以我们可以把每一个字符每一轮的概率合并成任意字符每一轮的概率,即将二维转化为一维。
然后我们考虑$f$数组。对于第k轮交换,一个字符它只有两种可能:即上一轮在自己原位;与上一轮不在自己原位。那么,上一轮每个字符的位置情况决定了这一轮的概率。
上一轮不在自己原位的概率:
我们知道,每个字符串都可以和与自己不相同的字符串交换,所以交换的可能性为:$\frac{n(n-1)}{2}$。一个上一轮不在自己原位的字符回到自己原位的概率是$\frac{1}{\frac{n(n-1)}{2}}$,化简得$\frac{2}{n(n-1)}$。
所以,一个上一轮不在自己原位的字符在这一轮不回到自己原位的概率是:1-$\frac{2}{n(n-1)}$,化简得$\frac{n(n-1)-2}{n(n-1)}$。而上一轮不在自己原位的概率又是$f[k-1]$,可得递推式$f[k-1]×\frac{n(n-1)-2}{n(n-1)}$
上一轮在自己原位的概率:
如果一个字符上一轮在自己的位置,那么它在上上轮不在自己位置到了上轮在自己位置的概率为$1-f[k-1]$,而如果一个字符上一轮在自己位置上,那么这一轮它只需要和任意一个非自己位置的字符交换即可,有$\frac{n-1}{\frac{n(n-1)}{2}}$
即$\frac{1}{n/2}$种概率在这一轮不在自己位置。于是合并得:$(1-f[k-1])×\frac{1}{n/2}$。
最后,只需把两种概率相加,可得:
$$f[k]=f[k-1]×\frac{n(n-1)-2}{n(n-1)}+(1-f[k-1])×\frac{1}{n/2}$$
贡献值
求和:
$$(1-f[k])×a[i]×\frac{2i(n-i+1)}{(n+1)n}+f[k]×\frac{sum-a[i]}{n-1}×\frac{2i(n-i+1)}{(1+n)n}$$
The Swap的更多相关文章
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- LVM 管理减少swap分区空间增加到根分区
简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现 ...
- [LeetCode] Swap Nodes in Pairs 成对交换节点
Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...
- 如何在Linux上使用文件作为内存交换区(Swap Area)
交换区域(Swap Area)有什么作用? 交换分区是操作系统在内存不足(或内存较低)时的一种补充.通俗的说,如果说内存是汽油,内存条就相当于油箱,交换区域则相当于备用油箱. Ubuntu Linux ...
- XOR Swap
swap(a, b): a ^= b b ^= a a ^= b 先明确一下,a ^ a = 0,同时对于一切数x ^ 0 = x 可以这样理解,第三行: b ^= a b ^= a ^ b b = ...
- 疑难问题解决备忘录(2)——ubuntu12.04分配swap
分配swapdd if=/dev/zero of=Swap.disk bs=1M count=6k (count=1k创建1G的Swap,如果要创建6G则count=6k:这步比较慢) 创建swap文 ...
- Linux上的free命令详解、swap机制
Linux上的free命令详解 解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free ...
- centos 创建swap 交换分区
阿里云的服务器是没有交换分区的,如 [www-data@iZbp1ivdq1ie5lmrhp13kjZ ~]$ free -m total used free shared buff/cache av ...
- Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...
- CentOS7 SWAP 设置 (实测 笔记)
首先查看当前的内存及swap情况(参数 -h,-m ) [root@centos ~]# free -h 查看swap信息,包括文件和分区的详细信息 [root@centos ~]# swapon - ...
随机推荐
- 三、CSS样式——文本
CSS文本 概念:CSS文本属性可定义文本外观 通过文本属性,可以改变文本的颜色.字符间距.对齐文本.装饰文本.对文本缩进 属性 描述 color 文本颜色 direction 文本方向 line-h ...
- 以超级管理员方式运行bat文件
以超级管理员方式直接运行bat 脚本文件,直接上脚本代码,以下是以一个服务的安装为例子 @echo =============================== ¶¯Ì¬ÅŲú·þÎñ ===== ...
- 文件系统的描述信息-/etc/fstab
/etc/fstab文件包含众多文件系统的描述信息.文件中每一行为一个文件系统的描述,每行的选项之间通过tab分隔,#开头的行会被转换为注释,空白行会被忽略./etc/fstab文件中的设备顺序很重要 ...
- PG数据库——视图
视图(View)是从一个或多个表(或视图)导出的表.视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义 ...
- eclipse安装中文语言包
打开eclipse官网 https://www.eclipse.org/ 选择Projects 搜索框输入:Babel 点击搜索 选择Downloads 根据eclipse启动图画里的版本选择要下载的 ...
- 遍历删除查临时表相关session再操作表
示例如下 删除 inf_getuserinfoforywh_temp1 (前提,相关用到inf_getuserinfoforywh_temp1的应用必须先停了) create or replace p ...
- Vim 简明教程【转载】
简明 Vim 练级攻略 第一级 – 存活 安装 vim 启动 vim 什么也别干!请先阅读 当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子.但vim不是这样的,请 ...
- WPF 自定义控件缩放
方式一: 自定义控件使用固定大小绘制:控件内的各个子控件大小设定固定值 优点:控件绘制简单.快捷. 缺点:使用时如需缩放,需在自定义控件的外面加一个 ViewBox . 使用示例如下(将 UserCo ...
- EF 数据迁移 常见错误
1.错误 “LC.exe”已退出,代码为 -1 原因:解决方案出错,而非迁移的项目
- 并发系列2:Java并发的基石,volatile关键字、synchronized关键字、乐观锁CAS操作
由并发大师Doug Lea操刀的并发包Concurrent是并发编程的重要包,而并发包的基石又是volatile关键字.synchronized关键字.乐观锁CAS操作这些基础.因此了解他们的原理对我 ...