CF1278F Cards(斯特林数+二项式定理)

news/2024/7/27 9:06:13/文章来源:https://www.cnblogs.com/dcytrl/p/18202965

题意简述

\(m\) 张牌,其中有一张是王牌。你现在可以洗 \(n\) 次牌(每种牌堆序列等概率出现),然后查看牌堆顶的第一张牌。设 \(x\)\(n\) 次洗牌中第一张牌是王牌的次数,则得分为 \(x^k\)

求得分的期望值对 \(998244353\) 取模的值。

\(1\le n,m<998244353,k\le 5000\)

分析

将答案形式化表述:

\[\sum_{i=0}^n \dbinom{n}{i}\dfrac{(m-1)^i\cdot [(m-1)\cdot (m-1)!]^{n-i}}{m!^n}\cdot i^k \]

化简:

\[=\sum_{i=0}^n \dbinom{n}{i}(\frac{1}{m})^i\cdot(\frac{m-1}{m})^{n-i} \cdot i^k \]

\(a=\frac{1}{m},b=\frac{m-1}{m}\),则原式为

\[=\sum_{i=0}^n \dbinom{n}{i}a^i\cdot b^{n-i} \cdot i^k \]

用第二类斯特林数拆掉这个幂次:

\[=\sum_{i=0}^n \dbinom{n}{i}a^i\cdot b^{n-i} \sum_{j=1}^k S(k,j)\cdot i^{\underline{j}} \]

其中 \(S(i,j)\) 表示第二类斯特林数。

交换求和顺序:

\[\sum_{j=1}^k S(k,j)\sum_{i=j}^n \dbinom{n}{i}a^i\cdot b^{n-i} \cdot \dbinom{i}{j}\cdot j! \]

注意只有 \(i\ge j\) 的时候 \(i^{\underline{j}}\) 才有意义,式子才成立。

\[=\sum_{j=1}^k S(k,j)\cdot j!\sum_{i=j}^n \dbinom{n}{i}\dbinom{i}{j} a^i\cdot b^{n-i} \]

\[=\sum_{j=1}^k S(k,j)\cdot j!\sum_{i=j}^n \dbinom{n}{j}\dbinom{n-j}{i-j} a^i\cdot b^{n-i} \]

考虑把后面那坨式子转化为二项式定理的形式:

\[=\sum_{j=1}^k S(k,j)\cdot j!\dbinom{n}{j}\sum_{i=0}^{n-j} \dbinom{n-j}{i} a^{i+j}\cdot b^{n-i-j} \]

根据二项式定理:

\[\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^{i+j}b^{n-i-j}=\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^ia^jb^{n-i-j} \]

\[=a^j\cdot\sum_{i=0}^{n-j}\dbinom{n-j}{i}a^{i}b^{n-i-j}=a^j\cdot (a+b)^{n-j}=1 \]

所以原式化为

\[\sum_{j=1}^kS(k,j)\cdot j!\cdot \dbinom{n}{j}\cdot a^j \]

由于 \(k\le 5000\),第二类斯特林数可以暴力递推算。

由于 \(n,m\) 过大,无法计算阶乘和组合数。但是两者可以约分成 \(\prod_{i=n-j+1}^n i\),这个东西就可以暴力 \(O(k)\) 算了(递推也可以)。时间复杂度 \(O(k^2)\)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<unordered_map>
#include<vector>
#include<queue>
#include<bitset>
#include<set>
#include<ctime>
#include<random>
#include<cassert>
#define x1 xx1
#define y1 yy1
#define IOS ios::sync_with_stdio(false)
#define ITIE cin.tie(0);
#define OTIE cout.tie(0);
#define PY puts("Yes")
#define PN puts("No")
#define PW puts("-1")
#define P0 puts("0")
#define P__ puts("")
#define PU puts("--------------------")
#define popc __builtin_popcount
#define mp make_pair
#define fi first
#define se second
#define gc getchar
#define pc putchar
#define pb emplace_back
#define rep(a,b,c) for(int a=(b);a<=(c);++a)
#define per(a,b,c) for(int a=(b);a>=(c);--a)
#define reprange(a,b,c,d) for(int a=(b);a<=(c);a+=(d))
#define perrange(a,b,c,d) for(int a=(b);a>=(c);a-=(d))
#define graph(i,j,k,l) for(int i=k[j];i;i=l[i].nxt)
#define lowbit(x) (x&-x)
#define lson(x) (x<<1)
#define rson(x) (x<<1|1)
#define mem(x,y) memset(x,y,sizeof x)
//#define double long double
#define int long long
//#define int __int128
using namespace std;
typedef long long i64;
using pii=pair<int,int>;
bool greating(int x,int y){return x>y;}
bool greatingll(long long x,long long y){return x>y;}
inline int rd(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
}
inline void write(int x,char ch='\0'){if(x<0){x=-x;putchar('-');}int y=0;char z[40];while(x||!y){z[y++]=x%10+48;x/=10;}while(y--)putchar(z[y]);if(ch!='\0')putchar(ch);
}
bool Mbg;
const int maxn=2e5+5,maxm=5e3+5,inf=0x3f3f3f3f,mod=998244353;
const long long llinf=0x3f3f3f3f3f3f3f3f;
int n,m,k;
int S[maxm][maxm];
int ksm(int x,int y){int res=1;for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;return res;
}
void init(){S[0][0]=1;rep(i,1,k)rep(j,1,i)S[i][j]=(S[i-1][j-1]+j*S[i-1][j]%mod)%mod;
}
void solve_the_problem(){n=rd(),m=rd(),k=rd(),init();int ans=0,p=ksm(m,mod-2),c=1,mp=1;rep(i,0,k){ans=(ans+S[k][i]*c%mod*mp)%mod;c=c*(n-i)%mod,mp=mp*p%mod;}write(ans);
}
bool Med;
signed main(){
//	freopen(".in","r",stdin);freopen(".out","w",stdout);
//	fprintf(stderr,"%.3lfMB\n",(&Mbg-&Med)/1048576.0);int _=1;while(_--)solve_the_problem();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/710252.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主流原型设计软件介绍

主流原型介绍 Axure Axure是一款强大的原型设计工具,它提供了丰富的功能,使设计师和产品经理能够快速创建互动原型和线框图,从而有效地传达设计思路和用户流程。 主要特点 1. 交互设计:Axure允许设计师创建高度互动的原型。通过拖放和设置各种交互动作(如点击、悬停、拖动等…

Strange Brigade(异域奇兵)全收集图文攻略

一、哈宾的挖掘场地 信件 1/7 起始位置往前走桥边帐篷桌子上猫猫 1/6 桥右转下坡转弯处猫猫 2/6 穿过洞穴第二个拱门上圣物 1/6 密室里信件 2/7 船边地上圣物 2/6 蝎子区进门靠右直走左转猫猫 3/6 蝎子区进门靠左上坡陶罐 1/4圣甲虫钥匙右边圣物 3/6 圣甲虫大门进去过场动画后一…

【DRF_02】基于Django CBV实现

路由系统from django.urls import path from app01.views import cbv_demourlpatterns = [# path(admin/, admin.site.urls),path(cbv/demo/, cbv_demo.StudentsView.as_view()), ]CBV视图from django.views import View from django.shortcuts import HttpResponse from djang…

考核复现-cnblog

考核复现 web 签到 源代码base64解密文件上传 先简单上传一个图片这里的类型被限制了,只允许上传哈哈类型的,修改一下吧上传成功 连接成功好玩的PHP 前一部分用数组绕过,后一部分将c赋值,用data伪协议绕过file_get_contents()函数 构造payload:?a[]=1&b[]=2&c=ab…

智能计算系统-Tensorflow框架的计算图机制

智能计算系统-Tensorflow框架的计算图机制 陈云霁老师的课,趁现在有时间,打算了解深度学习的底层原理。 从第五章编程框架机理开始,一到四章是深度学习基础,在此不再讨论 一. 深度学习框架的设计原则 1. 高性能 主要体现在神经网络的算子,针对底层硬件进行充分优化 在计算…

用户与组管理

一、服务器版本 windows服务器系统:win2003 、win2008、win2012、win2019 linux服务器系统:Redhat(开源收费(售后))、Centos(开源不收费) 二、用户概述1、每一个用户登录系统后,拥有不同的操作权限2、每个账户又自己唯一的SID(安全标识符) 为什么要分不同的用户 3、配…

ntfs

储备: 首先需要明白什么是文件系统。文件系统是系统对文件的存放排列方式,不同格式的文件系统关系到数据是如何在磁盘进行存储,文件名、文件权限和其他属性也存在不同。Windows操作系统支持 NTFS, FAT32, and exFAT三种不同文件系统。NTFS是目前Windows系统中一种现代文件系…

Chart.js (v2.9.4)概要介绍

chart.js是一个非常优秀的开源图表插件,扩展非常灵活,同时也提供了大量的钩子函数,给与用户添加自定义插件,实现个性化的需求。 具体的优势特点,这里不详述,网上大把资料,现开始正式深入了解这个插件.Chart布局大概分为如下六个区域,这些是主要的,也有些特殊,比如左右…

window版postgresql安装orafce插件

在Visual Studio中创建一个新的C工程:将解压目录下的除.sql和文件夹之外的文件都copy到新创建的工程中,另外要将sqlscan.c排除在项目之外 配置编译选项配置预处理器,预处理器定义中的内容为: WIN32 _WINDOWS _DEBUG _CRT_SECURE_NO_WARNINGS 注意要有_CRT_SECURE_NO_WARNI…

为什么 mov sp, 32,debug程序,执行sp=32的位置,后面的代码就全乱了(在小甲鱼零基础汇编第6章,包含多段程序,的视频代码)

assume cs:code, ds:data, ss:stackdata segmentdw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h; 用来作存放数据 data endsstack segmentdw 0, 0, 0, 0, 0, 0, 0, 0; 用来作栈的空间 stack ends code segmentstart:; 设置数据段mov ax, datamov ds, ax ; 设…

mysql报错:Lock wait timeout exceeded: try restadina transaction

这次是在Navicat上复制了一个表结构和数据准备备份一下,然后要用语句批量处理数据,结果导致项目上的更新操作报这个错误。原因是因为表中的数据量太大,复制表一时半会卡到那了。于是我在网上搜索了如下办法。尝试在数据库中杀死线程来终止复制表的操作。 SELECT * FROM info…

ASP.NET之JSONHelper操作

之前说到了Ext.Net中GridPanel行取值的问题(Ext.Net开发_GridPanel行选中取值),涉及到checkBox操作时,要留个心眼注意下取值的区别!返回值是Json格式。 现在用到了Json,就想自己也整一个Josn帮助类。在线帮助的资料很多,在巨人的身上东凑西凑也凑一个用用。   一、介绍…

Git:warning: CALF wilL be replaced by LF in xxxx 问题解决

warning: CALF wilL be replaced by LF in xxxx 问题解决办法 出现这个问题的原因是像缓存区中提交文件时出现的 原因: windows中的换行符为 CRLF,而在Linux下的换行符为LF,所以在执行add . 时出现提示 也就是, 工作区的文件都应该用 CRLF 来换行。如果 改动文件时引入了 …

密码爆破ssh与ftp服务(finish)

密码爆破ssh与ftp服务 使用工具九头蛇(hydra) ssh 环境配置 win10 安装sshd服务端在cmd命令行使用 net start sshd 命令启动服务kali 打开终端查看是否开启ssh服务 nmap -sV -T4 -p- [kali的ip] 先创建一个用户名字典username.txt,把经常用的用户名写入到字典中 touch usern…

Obsidian第三方插件下载

一、从Obsidian插件市场下载 使用第三方插件的第一步是关闭安全模式。点击“浏览”,搜索需要的插件名称。在这里输入名称搜索。点击安装。点击启用。必要时要使用魔法。 替代方法proxy-github二、从别的地方下载的插件 首先了解一下obsidian插件的基本构成,主要包括下面的文件…

鸿蒙4.2小版本大亮点,鸿蒙5.0也不远了

混合应用开发技术,特别是结合小程序和原生技术,为鸿蒙应用开发带来了显著的优势。首先,它简化了开发流程,使开发者能够迅速创建出高质量的应用程序。这不仅缩短了开发周期,还提升了应用的整体性能和用户体验。上个月,市场上迎来了华为鸿蒙系统4字开头的小升级,版本来到了…

JPA和Hibernate的乐观锁与悲观锁

哈喽,大家好,我是木头左!JPA和Hibernate的乐观锁和悲观锁 乐观锁 乐观锁是一种假设资源不会被冲突影响的并发控制策略。它假设多个事务在同一时间内不会发生冲突,因此不需要加锁。当事务提交时,如果检测到数据发生了改变,就会抛出异常,让开发者决定如何处理这个冲突。 在…

树形DP

树形 DP 即在树上进行的 DP。 常见的两种转移方向:父节点 \(\rightarrow\) 子节点:如求节点深度,\(dp_u = dp_{fa} + 1\) 子节点 \(\rightarrow\) 父节点:如求子树大小,\(dp_u = 1 + \sum dp_v\)习题:P5658 [CSP-S2019] 括号树暴力 本题 \(n\) 小的数据点保证为链,直接枚…