题目链接

题目背景

题目描述

在一个n*m 的矩阵A 的所有位置中随机填入0 或1,概率比为x : y。令B[i]=a[i][1]+a[i][2]+......+a[i][m],求min{B[i]}的期望,并将期望乘以(x + y)^nm 后对1e9+7取模。

输入输出格式

输入格式:

共一行包含四个整数n,m,x ,y。

输出格式:

共一行包含一个整数ans,表示期望乘以(x + y)^nm 后模1e9+7的值。

输入输出样例

输入样例#1:

2 2 1 1
输出样例#1:

10

说明

对于20% 的数据:n,m,x,y<=3

对于40% 的数据:n,m,x,y<= 70

对于70% 的数据:n,m,x,y<=5000

对于100% 的数据:n,m,x,y<=200000

数学知识:

数学期望是试验中所有可能结果的概率乘以其结果的总和,它反映随机变量平均取值的大小。需要注意的是,期望值并不一定等同于常识中的期望——期望值也许与每一个结果都不相等。换句话说,期望值是该变量取值的平均数,但并不一定包含在变量的输出值集合里。

在本题中,期望E =0*P(min{B[i]}=0)+1*P(min{B[i]}=1)+2*P(min{B[i]}=2)+......+m*P(min{B[i]}=m)。

题目要求将期望乘以(x + y)^nm,可以等价于:

对于矩阵中的每一个元素暴力枚举x+y 次取值,其中x 次为0,y 次为1,一共得到(x+y)^nm 个矩阵,分别计算其min{B[i]}的值并求和。

题目来源:江苏省常州高级中学 在此鸣谢

题解:

20分做法:见上文数学知识中的“等价于”部分。

30,70分做法:不同的DP。(DP蒟蒻表示并不会写这个部分分QAQ)

100分做法:

预备知识:

二项分布(苏教版数学选修2-3内容)。

$\because$对于矩阵中任意一行,情况均相同,记矩阵中某行元素之和为$B$。
由二项分布知,每一个元素为0的概率为$\frac{x}{x+y}$,为1的概率为$\frac{y}{x+y}$。
$\therefore P_{B=i}=C^{m}_{i}(\frac{x}{x+y})^{m-i}\cdot(\frac{y}{x+y})^{i}$
=$\frac{C^m_i \cdot x^{m-i} \cdot y^i}{(x+y)^m}$
在$min_B=i$的情况下,对于每一行的$B$,均有$B \geq i$,$\because \exists B=i$,也就是要除去每一行的$B$都大于$i$的情况。
$\therefore P_{(min_{B}=i)}=P^n_{B \geq i}-P^n_{B>i}$
$=P^n_{B \geq i}-P^n_{b \geq i+1}$。
$\therefore E=\sum_{i=0}^{m}i \cdot P_{min_{B}=i}$
$=\sum_{i=1}^{m}i \cdot P^n_{B \geq i}-i \cdot P^n_{b \geq i+1}$
$=P^n_{B \geq 1}-P^n_{B \geq 2}+2P^n_{B \geq 2}-2P^n_{B \geq 3}+ \cdots -m \cdot P^n_{B \geq m+1}$
$\because P_{B \geq m+1}=0$
$\exists E=\sum_{i=1}^{m}P^{n}_{B \geq i}$.
又$\because P_{B \geq i}=P_{B=i}+P_{B=i+1}+ \cdots +P_{B=m}$
$\therefore E=\sum_{i=1}^{m}(\sum_{j=i}^{m}P_{B=j})^{n}$
$=\sum_{i=1}^{m}(\sum_{j=i}^{m}\frac{C_{m}^{j} \cdot x^{m-j} \cdot y^j}{(x+y)^m})^n$
$\therefore ans=(x+y)^{m \cdot n}\cdot E=\sum_{i=i}^{m}(\sum_{j=i}^{m}C_{m}^j \cdot x^{m-j} \cdot y^j)^n$
$\because m,x,y$给定
$\therefore $记$C_{m}^{j}x^{m-j} \cdot y^{j}=A_{j},S_{j}=\sum_{i=1}^{j}A_i$
$\therefore ans=\sum_{i=1}^{m}(\sum_{j=i}^{m}C_{m}^j \cdot x^{m-j} \cdot y^j)^n$
$=\sum_{i=1}^{m}(S_{m}-S_{i-1})^n$
$O_{(n)}$预处理出$C_{m}^{i}$,随后计算$A_{i},S_{i}$,求和即可。
一道裸的数学题……

代码:

 1 #include<bits/stdc++.h>
2 #define LL long long
3 #define f(m,j) c[j]*pow_mod(y,j)%MOD*pow_mod(x,m-j)%MOD
4 using namespace std;
5 const int maxn=2e5+10,MOD=1e9+7;
6 LL fac[maxn],infac[maxn],c[maxn];
7 LL a[maxn],s[maxn];
8 int n,m,x,y;LL ans=0;
9 LL pow_mod(LL a,int k)
10 {
11 LL ans=1;
12 for(;k;a=a*a%MOD,k>>=1){if(k&1){ans=ans*a%MOD;}}
13 return ans;
14 }
15 void init()
16 {
17 int i,j;
18 fac[0]=1;
19 for(i=1;i<=m;i++){fac[i]=fac[i-1]*i%MOD;}
20 for(i=0;i<=m;i++){infac[i]=pow_mod(fac[i],MOD-2);}
21 for(i=0;i<=m;i++){c[i]=fac[m]*infac[i]%MOD*infac[m-i]%MOD;}
22 }
23 int main()
24 {
25 int i,j;LL tmp;
26 cin>>n>>m>>x>>y;
27 init();
28 for(i=1;i<=m;i++){a[i]=f(m,i);s[i]=(s[i-1]+a[i])%MOD;}
29 for(i=1;i<=m;i++)
30 {
31 tmp=(s[m]-s[i-1]+MOD)%MOD;
32 ans=(ans+pow_mod(tmp,n))%MOD;
33 }
34 cout<<ans;
35 return 0;
36 }

Luogu T7468 I liked Matrix!的更多相关文章

  1. 组合数取模及Lucas定理

    引入: 组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数.定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ). 根据题目中对组合数的需要 ...

  2. luogu题解 UVA11992 【Fast Matrix Operations】

    题目链接: https://www.luogu.org/problemnew/show/UVA11992 题目大意: 一个r*c的矩阵,一开始元素都是0,然后给你m次三种操作,分别是将一个子矩阵中所有 ...

  3. CJOJ 1331 【HNOI2011】数学作业 / Luogu 3216 【HNOI2011】数学作业 / HYSBZ 2326 数学作业(递推,矩阵)

    CJOJ 1331 [HNOI2011]数学作业 / Luogu 3216 [HNOI2011]数学作业 / HYSBZ 2326 数学作业(递推,矩阵) Description 小 C 数学成绩优异 ...

  4. Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂)

    Luogu 1349 广义斐波那契数列(递推,矩阵,快速幂) Description 广义的斐波那契数列是指形如\[A_n=p*a_{n-1}+q*a_{n-2}\]的数列.今给定数列的两系数p和q, ...

  5. Luogu 1962 斐波那契数列(矩阵,递推)

    Luogu 1962 斐波那契数列(矩阵,递推) Description 大家都知道,斐波那契数列是满足如下性质的一个数列: f(1) = 1 f(2) = 1 f(n) = f(n-1) + f(n ...

  6. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  7. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...

  8. Luogu P4643 【模板】动态dp

    题目链接 Luogu P4643 题解 猫锟在WC2018讲的黑科技--动态DP,就是一个画风正常的DP问题再加上一个动态修改操作,就像这道题一样.(这道题也是PPT中的例题) 动态DP的一个套路是把 ...

  9. Luogu P4643 【模板】动态dp(矩阵乘法,线段树,树链剖分)

    题面 给定一棵 \(n\) 个点的树,点带点权. 有 \(m\) 次操作,每次操作给定 \(x,y\) ,表示修改点 \(x\) 的权值为 \(y\) . 你需要在每次操作之后求出这棵树的最大权独立集 ...

随机推荐

  1. Docker学习笔记之创建安装了nginx服务器的镜像

    操作步骤: 1. 编辑Dockerfile 2. 使用build命令创建镜像 3. 使用run命令测试创建的镜像 编辑Dockerfile 首先,需要使用文本编辑器编辑Dockerfile文件(注意没 ...

  2. python学习笔记 | PyCharm出现卡顿解决方法

    问题:使用pycharm时常出现 the IDE is running low on memory 的问题 表示pycharm这款IDE使用内存不足 需要在系统内存充足的情况下扩充IDE memory ...

  3. 【SpringBoot】前缀树 Trie 过滤敏感词

    1.过滤敏感词 Spring Boot实践,开发社区核心功能 完成过滤敏感词 Trie 名称:Trie也叫做字典树.前缀树(Prefix Tree).单词查找树 特点:查找效率高,消耗内存大 应用:字 ...

  4. 【RAC】打完补丁后,发现只有一台rac可以启动,另一台无法启动

    安装11Gr2单机asm后,打完11.2.0.3.7的psu后,发现启动不起来数据库,alert日志内容如下: Errors in file /u01/app/oracle/diag/rdbms/bd ...

  5. LeetCode383. 赎金信

    题目 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成.如果可以构成,返回 tru ...

  6. oracle关闭监听log.xml文件生成步骤

    1.查看sqlnet.ora文件是否存在 cd $ORACLE_HOME/network/admin ls 如果不存在,copy一个过来 cp samples/sqlnet.ora . 2.修改sql ...

  7. mysql:如何解决数据修改冲突(事务+行级锁的实际运用)

    摘要:最近做一个接诊需求遇到一个问题,假设一个订单咨询超过3次就不能再接诊,但如果两个医生同时对该订单进行咨询,查数据库的时候查到的接诊次数都是2次,那两个医生都能接诊,所谓接诊可以理解为更新了接诊次 ...

  8. python zxing包解析二维码报UnicodeDecodeError错误解决办法

    一般错误的原因是这个库不支持中文的解码(二维码内容包含中文). 修改如下: 进入zxing.__init__.py代码中,类BarCode下,parse方法中: 找到下面这两行原代码如下: 1 raw ...

  9. 开发中的你的Git提交规范吗?

    1. 前言 目前大部分公司都在使用Git作为版本控制,每个程序员每天都要进行代码的提交.很多开发者也包括我自己,有时候赶时间或者图省事,就这么提交: git commit -m "修改bug ...

  10. ElasticSearch极简入门总结

    一,目录 安装es 项目添加maven依赖 es客户端组件注入到spring容器中 es与mysql表结构对比 索引的删除创建 文档的crud es能快速搜索的核心-倒排索引 基于倒排索引的精确搜索. ...