洛谷题面传送门

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. Codeforces Round #747 (Div. 2) Editorial

    Codeforces Round #747 (Div. 2) A. Consecutive Sum Riddle 思路分析: 一开始想起了那个公式\(l + (l + 1) + - + (r − 1) ...

  2. 实用小工具:screen

    实用小工具:screen 首先,吹爆screen screen,实现了不间断的会话服务,通过SSH连接至远程服务器,当使用了screen开启的会话,不会因为你断开SSH而中断在远程服务器上运行的命令. ...

  3. [技术博客]大闸蟹的技术博客,通过gitlab api进行用户批量创建

    技术博客--通过gitlab api批量注册用户 gitlab登录界面本身提供了register功能,但需要手工一个个添加,对于一次性会添加整个班级的学生的软工平台来说并不科学合理.使用gitlab ...

  4. Prometheus的单机部署

    Prometheus的单机部署 一.什么是Prometheus 二.Prometheus的特性 三.支持的指标类型 1.Counter 计数器 2.Gauge 仪表盘 3.Histogram 直方图 ...

  5. 一文读懂Android进程及TCP动态心跳保活

    一直以来,APP进程保活都是 各软件提供商 和 个人开发者 头疼的问题.毕竟一切的商业模式都建立在用户对APP的使用上,因此保证APP进程的唤醒,提升用户的使用时间,便是软件提供商和个人开发者的永恒追 ...

  6. 穿点最多的直线 牛客网 程序员面试金典 C++

    穿点最多的直线 牛客网 程序员面试金典 C++ 题目描述 在二维平面上,有一些点,请找出经过点数最多的那条线. 给定一个点集vectorp和点集的大小n,没有两个点的横坐标相等的情况,请返回一个vec ...

  7. Docker的centos镜像内无法使用systemctl命令的解决办法

    在Docker官方的centos镜像内无法使用systemctl命令的解决办法, 使用该命令docker报错 Failed to get D-Bus connection: Operation not ...

  8. pycharm安装指导教程

    pycharm下载安装教程 1.pycharm下载官网 http://www.jetbrains.com/pycharm/ 2.下载好安装包后双击点开安装包文件,这边以专业版为例 按以上图片所示教程, ...

  9. js 透明度轮播图

    js 透明度轮播图 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. @PostConstruct和static静态块初始化的区别

    static blocks are invoked when the class is being initialized, after it is loaded. The dependencies ...