洛谷题面传送门

u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解

\[\begin{aligned}
res&=\sum\limits_{i=0}^ni^k\dbinom{n}{i}(\dfrac{1}{m})^i(\dfrac{m-1}{m})^{n-i}\\
&=\sum\limits_{i=0}^n\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}\dbinom{n}{i}(\dfrac{1}{m})^i(\dfrac{m-1}{m})^{n-i}\\
&=(\dfrac{m-1}{m})^{n}\sum\limits_{i=0}^n\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}\dbinom{n}{i}(\dfrac{1}{m-1})^i\\
&=(\dfrac{m-1}{m})^{n}\sum\limits_{i=0}^n\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}\dbinom{n}{i}(\dfrac{1}{m-1})^i\\
&=(\dfrac{m-1}{m})^{n}\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}j!\sum\limits_{i=0}^n\dbinom{i}{j}\dbinom{n}{i}(\dfrac{1}{m-1})^i\\
&=(\dfrac{m-1}{m})^{n}\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}j!\dbinom{n}{j}(\dfrac{1}{m-1})^j\sum\limits_{i=0}^{n-j}\dbinom{n-j}{i-j}(\dfrac{1}{m-1})^i\\
&=(\dfrac{m-1}{m})^{n}\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}j!\dbinom{n}{j}(\dfrac{1}{m-1})^j(\dfrac{m}{m-1})^{n-j}\\
&=\sum\limits_{j=1}^k\begin{Bmatrix}k\\j\end{Bmatrix}j!\dbinom{n}{j}(\dfrac{1}{m})^j\\
&=\sum\limits_{j=1}^k\sum\limits_{l=0}^j\dbinom{j}{l}l^k(-1)^{j-l}\dbinom{n}{j}(\dfrac{1}{m})^j\\
&=\sum\limits_{l=0}^jl^k\sum\limits_{j=1}^k\dbinom{j}{l}(-1)^{j-l}\dbinom{n}{j}(\dfrac{1}{m})^j\\
&=\sum\limits_{l=0}^kl^k\dbinom{n}{l}\sum\limits_{j=l}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j\\
\end{aligned}
\]

前面那东西我们要枚举 \(l\),复杂度自然有一个 \(k\),后面那东西看似可以二项式定理,但是由于上界为 \(k\) 而不是 \(n\),实则不能,因此考虑按照套路进行递推,设 \(f_l\)​ 表示

\[f_l=\sum\limits_{j=l}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j
\]

那么

\[\begin{aligned}
f_{l-1}&=\sum\limits_{j=l-1}^k(-1)^{j-l+1}\dbinom{n-l+1}{j-l+1}(\dfrac{1}{m})^j\\
&=-\sum\limits_{j=l-1}^k(-1)^{j-l}\dbinom{n-l+1}{j-l+1}(\dfrac{1}{m})^j\\
&=-\sum\limits_{j=l-1}^k(-1)^{j-l}\dbinom{n-l}{j-l+1}(\dfrac{1}{m})^j-\sum\limits_{j=l-1}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j\\
&=-\sum\limits_{j=l}^{k+1}(-1)^{j-1-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^{j-1}-\sum\limits_{j=l-1}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j\\
&=m\sum\limits_{j=l}^{k+1}(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^{j}-\sum\limits_{j=l-1}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j\\
&=m(\sum\limits_{j=l}^{k}(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^{j}+(-1)^{k+1-l}\dbinom{n-l}{k+1-l}(\dfrac{1}{m})^{k+1})-\sum\limits_{j=l}^k(-1)^{j-l}\dbinom{n-l}{j-l}(\dfrac{1}{m})^j\\
&=m(f_l+(-1)^{k+1-l}\dbinom{n-l}{n-k-1}(\dfrac{1}{m})^{k+1})-f_l
\end{aligned}
\]

从后往前一遍递推即可。\(\text{id}_k\) 可以一遍线筛筛出,复杂度 \(\mathcal O(k)\)

至于我是哪里被卡住了呢……在第一个公式的第七个等于号那边,我上来就想拆开来递推,然后发现递推完了要套好几层,然后就 quit 了。事实证明一般只有只带一个组合数的式子才能递推求解。

那么问题就来了,为什么我的 \(\mathcal O(k)\) 跑不过 \(\mathcal O(k\log k)\)/yun/yun

const int MAXK=1e7+1;
const int MOD=998244353;
int n,m,k;
int qpow(int x,int e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int fac[MAXK+5],ifac[MAXK+5],f[MAXK+5],inv[MAXK+5];
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=inv[0]=inv[1]=1)+1;i<=n;i++) inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*inv[i]%MOD;
}
int pwk[MAXK+5],pr[MAXK/10+5],prcnt=0;
bitset<MAXK+5> vis;
void sieve(int n){
pwk[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]) pwk[i]=qpow(i,k);
for(int j=1;j<=prcnt&&pr[j]*i<=n;j++){
vis[pr[j]*i]=1;pwk[pr[j]*i]=1ll*pwk[pr[j]]*pwk[i]%MOD;
if(i%pr[j]==0) break;
}
}
}
int main(){
init_fac(MAXK);int res=0;
scanf("%d%d%d",&n,&m,&k);sieve(k+1);
int ivm=qpow(m,MOD-2),pw=qpow(ivm,k+1);
for(int l=k+1,cur=1;l>=2;l--){
int t=1ll*cur*pw%MOD;
// printf("%d\n",cur);
if((k+1-l)&1) f[l-1]=(1ll*m*(f[l]-t+MOD)%MOD-f[l]+MOD)%MOD;
else f[l-1]=(1ll*m*(f[l]+t)%MOD-f[l]+MOD)%MOD;
cur=1ll*cur*(n-l+1+MOD)%MOD*inv[k+2-l]%MOD;
}
for(int l=1,cur=n;l<=k;l++){
res=(res+1ll*f[l]*pwk[l]%MOD*cur)%MOD;
cur=1ll*cur*(n-l)%MOD*inv[l+1]%MOD;
} printf("%d\n",res);
return 0;
}

洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)的更多相关文章

  1. 洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)

    题目大意: 给定一个DAG,求起点到终点的路径长度期望 根据题意可以知道每一条边都有一定概率被走到 那么\(\displaystyle\begin{aligned} Ans = \sum_{e \in ...

  2. 【洛谷】P1095 守望者的逃离(递推)

    题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会 ...

  3. [codevs1048]石子归并&[codevs2102][洛谷P1880]石子归并加强版

    codevs1048: 题目大意:有n堆石子排成一列,每次可合并相邻两堆,代价为两堆的重量之和,求把他们合并成一堆的最小代价. 解题思路:经典区间dp.设$f[i][j]$表示合并i~j的石子需要的最 ...

  4. 洛谷 P1446 [HNOI2008]Cards 解题报告

    P1446 [HNOI2008]Cards 题目描述 小春现在很清闲,面对书桌上的\(N\)张牌,他决定给每张染色,目前小春只有\(3\)种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun ...

  5. 洛谷——P2082 区间覆盖(加强版)

    P2082 区间覆盖(加强版) 题目描述 已知有N个区间,每个区间的范围是[si,ti],请求出区间覆盖后的总长. 输入输出格式 输入格式: N s1 t1 s2 t2 …… sn tn 输出格式: ...

  6. 洛谷P1446 [HNOI2008]Cards

    置换群+dp #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring& ...

  7. 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...

  8. 洛谷P2082 区间覆盖(加强版)(珂朵莉树)

    传送门 虽然是黄题而且还是一波离散就能解决的东西 然而珂朵莉树还是很好用 相当于一开始区间全为0,然后每一次区间赋值,问最后总权值 珂朵莉树搞一搞就好了 //minamoto #include< ...

  9. 洛谷P1446/BZOJ1004 Cards Burnside引理+01背包

    题意:有n张牌,有R+G+B=n的3种颜色及其数量,要求用这三种颜色去染n张牌.n张牌有m中洗牌方式,问在不同洗牌方式下本质相同的染色方案数. 解法:这道题非常有意思,题解参考Hzwer学长的.我这里 ...

随机推荐

  1. [no code][scrum meeting] Beta 8

    $( "#cnblogs_post_body" ).catalog() 例会时间:5月22日15:30,主持者:赵涛 下次例会时间:5月23日11:30,主持者:肖思炀 一.工作汇 ...

  2. OO_JAVA_JML系列第三次作业__架构之谈

    OO_JAVA_JML系列第三次作业 ## ----架构之谈 目录 OO_JAVA_JML系列第三次作业 出发点 操作的可分离性 操作本身的多样性 实现手段:表驱动编程 储存 注册 出发点 操作的可分 ...

  3. Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

    前言   做一些数据处理软件,使用matlab文件,.mat文件.   准备条件   安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版 ...

  4. 议题解析与复现--《Java内存攻击技术漫谈》(一)

    解析与复现议题 Java内存攻击技术漫谈 https://mp.weixin.qq.com/s/JIjBjULjFnKDjEhzVAtxhw allowAttachSelf绕过 在Java9及以后的版 ...

  5. 微信小程序API接口封装

    @ 目录 一,让我们看一下项目目录 二,让我们熟悉一下这三个文件目的(文件名你看着办) 三,页面js中如何使用 今天的API的封装,我们拿WX小程序开发中,对它的API (wx.request)对这个 ...

  6. Vue-cli4.xPC端项目Rem适配

    适配准备 安装 (amfe-flexible) 和(postcss-px2rem) 1, 安装依赖并在main.js中引入该依赖 npm i amfe-flexible import "am ...

  7. 【java+selenium3】隐式等待+显式等待 (七)

    一.隐式等待 -- implicitlyWait 调用方式:driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit); / ...

  8. python3.7 pip

    Is pip the same for 3.4+ No, it's not. A single pip installation serves a single Python distribution ...

  9. 什么是齐博x1标签

    X系列的标签跟V系列的标签区别还是很大的.在V系列的时候,只有一种很简单的标签比如$label[XXXX]以前的标签相对现在的来说太简单的点,所以在功能上也比较受限.X系列目前有几下几种标签 {qb: ...

  10. Python基础(偏函数)

    import functools#functools.partial就是帮助我们创建一个偏函数的,functools.partial的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一 ...