[1] 分析

设 \(m\) 次选的位置分别为 \(b_{1\sim m}\)。

于是答案为 \(\mathbb E(\prod\limits_{i = 1}^{n}(a_i + \sum\limits_{j = 1}^{m}[b_j \le i]\cdot v)) = \frac{S}{n^m}\)。

首先考虑期望很难做,希望将期望转化为概率形式,通过计算期望贡献之和来计算期望,发现因为这题贡献难以计算,这样还是有点困难。

再考虑因为所有方案等概率,将求期望转化为求所有情况下所期望答案的总和,最后除以总方案数即可,即求 \(S\)。

\(S = \sum\limits_{b}\prod\limits_{i = 1}^{n}(a_i + \sum\limits_{j = 1}^{m}[b_j \le i]\cdot v)\),发现最终的 \(a_i = a_i + v +\cdots\)。

因为答案最终是多个 \(n\) 个数相乘得到的数相加,于是答案可以 DP 求出。

具体而言,令 \(f_{i,j}\) 代表前 \(i\) 个数确定,有 \(j\) 个 \(b_p\) 已经确定。(注意,对 \(v\) 的个数并没有限制)。

对当前这一位分类讨论:

若这一位取 \(a_i\),则 \(f_{i - 1,j}\cdot a_i\to f_{i,j}\)。

若这一位取 \(v\)(已确定位置的 \(b\) 提供),则 \(f_{i - 1,j}\cdot v\cdot j\to f_{i,j}\)。

若这一位取 \(v\)(新确定一个 \(b\)),则 $f_{i - 1,j - 1}\cdot v\cdot (m - (j - 1))\cdot i\to f_{i,j} $。

那么初始有 \(f_{0,0} = 1\)。

最后统计答案 \(S = \sum\limits_{i=0}^{\min(n,m)} f_{n,i}\cdot n^{m-i}\)。

[2] 代码

int main() {
rd(n); rd(m); rd(v);
rep(i, 1, n) rd(a[i]);
int cur = 1;
int pre = 0;
f[0][0] = 1;
rep(i, 1, n) {
rep(j, 0, min(i, m)) {
f[cur][j] = 1LL * f[pre][j] * (a[i] + 1LL * v * j % mod) % mod;
if(j > 0) fadd(f[cur][j], 1LL * f[pre][j - 1] * v % mod * (m - (j - 1)) % mod * i % mod);
}
swap(cur, pre);
}
rep(i, 0, min(n, m)) {
fadd(S, f[pre][i] * fpow(n, m - i) % mod);
}
S = S * fpow(fpow(n, m), mod - 2) % mod;
pt("%d\n", S);
return 0;
}

[3] 经验

在遇到求期望的题目时,尝试将期望变为求概率方案\(\cdot\)贡献

Tenzing and Random Operations CF1842G 题解的更多相关文章

  1. Lintcode105 Copy List with Random Pointer solution 题解

    [题目描述] A linked list is given such that each node contains an additional random pointer which could ...

  2. CF Gym 102028G Shortest Paths on Random Forests

    CF Gym 102028G Shortest Paths on Random Forests 抄题解×1 蒯板子真jir舒服. 构造生成函数,\(F(n)\)表示\(n\)个点的森林数量(本题都用E ...

  3. NOI2014 随机数生成器

    随机数生成器 [问题描述] 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的 ...

  4. Grinder搭建小记与Nduja(这次不待续了)

    Grinder是比较有名的浏览器FUZZ框架,采用ruby语言编写,主要是作为测试框架来使用,在<白帽子讲浏览器安全>一书中作者使用了Nduja生成测试样本来配合Grinder使用.根据网 ...

  5. leveldb0

    leveldb的源代码进行学习,则纯粹是出于一个码农对美好世界进行探究的好奇.接下来将尽可能从源代码上给出leveldb代码的详尽注释,这里先列出自己在阅读前后的主要参考. 0 官方文档http:// ...

  6. [LeetCode]题解(python):138-Copy List with Random Pointer

    这道题目不是太懂,参考了http://www.cnblogs.com/zuoyuan/p/3745126.html的博客. 题意: A linked list is given such that e ...

  7. codechef Row and Column Operations 题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

  8. HDU 5938 Four Operations(乱搞)题解

    题意:把'+', '-', '*' 和'/'按顺序插入任意两数字间隔,使得操作得到后计算后最大. 思路:没想到是个水题,打的时候想得太复杂了.这道题其实只要考虑*和/.显然我们要把a*b/c弄到最小. ...

  9. LeetCode题解之Copy List with Random Pointer

    1.题目描述 2.问题分析 首先要完成一个普通的单链表的深度复制,然后将一个旧的单链表和新的单链表的节点使用map对应起来,最后,做一次遍历即可. 3.代码 RandomListNode *copyR ...

  10. HDU 6315 Naive Operations(线段树+区间维护)多校题解

    题意:a数组初始全为0,b数组题目给你,有两种操作: 思路:dls的思路很妙啊,我们可以将a初始化为b,加一操作改为减一,然后我们维护一个最小值,一旦最小值为0,说明至少有一个ai > bi,那 ...

随机推荐

  1. Sql Server 按日统计产量

    碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线. 于是找到下面的办法, ...

  2. webpack4.15.1 学习笔记(十) — 常见 loader 使用

    目录 style -loader <= css-loader <= less-loader postcss-loader file-loader url-loader html-withi ...

  3. oeasy教您玩转vim - 81 - # 宏macro的进阶

    ​ 宏的进阶 macro 回忆 关于宏,上次有4个要点 qa 开始录制宏 q 结束录制宏 @a 应用宏 qA 追加录制宏 甚至可以编辑宏 "ap 把宏作为文本粘贴出来 编辑之后 " ...

  4. JavaScript 探究[] == ![]结果为true,而 {} == !{}却为false

    console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比较字符串.数值和布尔值的相等性时,问题还比较简单.但在涉及到对 ...

  5. Segment-anything学习到微调系列_SAM初步了解

    Segment-anything学习到微调系列_SAM初步了解 前言 本系列文章是博主在工作中使用SAM模型时的学习笔记,包含三部分: SAM初步理解,简单介绍模型框架,不涉及细节和代码 SAM细节理 ...

  6. ansible 部署hadoop

    规划 ansible 节点 ansible controller 镜像rhel 8.2 镜像ansible hadoop 集群 master slave1 slave2 镜像centos 1810 0 ...

  7. python multipart/form-data post接口请求

    python multipart/form-data post接口请求 def WebKit_format(data, boundary="----WebKitFormBoundary*** ...

  8. Jmeter函数助手16-StringFromFile

    StringFromFile函数用于获取文本文件的值,一次读取一行,可读取多个文件. 输入文件的全路径:填入文件路径 存储结果的变量名(可选) Start file sequence number ( ...

  9. 【RabbitMQ】08 深入部分P1 可靠性投递

    1.消息投递确认 这里的代码延用了06的东西: https://www.cnblogs.com/mindzone/p/15374684.html 删除之前的整合案例,重新写了一份案例的队列和交换机配置 ...

  10. 【DataBase】MySQL 09 SQL函数 单行函数其三 日期函数

    日期函数 日期&时间函数 NOW 当前日期时间. CURDATE 当前日期. CURTIME 当前时间 -- NOW();返回系统日期+时间 SELECT NOW(); -- CURDATE( ...