传送门

先看我们要求的是什么,要求的期望就是总权值/总方案,总权值可以枚举进球的个数\(i\),然后就应该是\(\sum_{i=0}^{k} \binom{m}{i}\binom{n-m}{k-i}i^l\),总方案是\(\binom{n}{k}\)

直接做显然不行,然后式子里有个\(i^l\),把它拆开,也就是\(\sum_{j=0}^{l} \binom{i}{j}S_{l,j}j!\),代入原式\[\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}\sum_{j=0}^{l} \binom{i}{j}S_{l,j}j!\]\[\sum_{j=0}^{l} S_{l,j}j!\sum_{i=0}^{k}\binom{m}{i}\binom{i}{j}\binom{n-m}{k-i}\]\[\sum_{j=0}^{l} S_{l,j}j!\sum_{i=0}^{k}\binom{m}{j}\binom{m-j}{i-j}\binom{n-m}{k-i}\]\[\sum_{j=0}^{l} S_{l,j}j!\binom{m}{j}\sum_{i=0}^{k}\binom{m-j}{i-j}\binom{n-m}{k-i}\]\[\sum_{j=0}^{l} S_{l,j}j!\binom{m}{j}\binom{n-j}{k-j}\]

然后只要能快速预处理出\(S_{l,j}\)就能做了.考虑组合意义\[S_{n,m}=\frac{1}{m!}\sum_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n\]\[S_{n,m}=\sum_{i=0}^{m}\frac{(-1)^i}{i!}\frac{(m-i)^n}{(m-i)!}\]

卷积即可

这题可能有点卡常,注意简化运算

// luogu-judger-enable-o2
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define db doubleusing namespace std;
const int N=2e7+10,M=550000+10,mod=998244353;
LL rd()
{LL x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w;
}
int fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
int inv(int a){return fpow(a,mod-2);}
int fac[N],iac[N],rdr[M];
void ntt(int *a,int n,bool op)
{int x,y;for(int i=0;i<n;++i)if(i<rdr[i]) swap(a[i],a[rdr[i]]);for(int i=1;i<n;i<<=1){int ww=fpow(op?3:332748118,(mod-1)/(i<<1));for(int j=0;j<n;j+=i<<1)for(int k=0,w=1;k<i;++k,w=1ll*w*ww%mod)x=a[j+k],y=1ll*a[j+k+i]*w%mod,a[j+k]=(x+y)%mod,a[j+k+i]=(x-y+mod)%mod;}if(!op) for(int i=0,w=inv(n);i<n;++i) a[i]=1ll*a[i]*w%mod;
}
int C(int n,int m){return m<0||n<m?0:1ll*fac[n]*iac[m]%mod*iac[n-m]%mod;}
int n,m,s,l,aa[M],bb[M],prm[M>>1],tt;
bool v[M];int main()
{n=rd(),m=rd(),s=rd(),l=rd();fac[0]=1;int lm=max(n,l);for(int i=1;i<=lm;++i) fac[i]=1ll*fac[i-1]*i%mod;iac[lm]=inv(fac[lm]);for(int i=lm;i;--i) iac[i-1]=1ll*iac[i]*i%mod;bb[1]=1;for(int i=2;i<=l;++i){if(!v[i]) prm[++tt]=i,bb[i]=fpow(i,l);for(int j=1;j<=tt&&i*prm[j]<=l;++j){v[i*prm[j]]=1;bb[i*prm[j]]=1ll*bb[i]*bb[prm[j]]%mod;if(i%prm[j]==0) break;}}for(int i=0;i<=l;++i)aa[i]=(i&1)?mod-iac[i]:iac[i];for(int i=0;i<=l;++i)bb[i]=1ll*bb[i]*iac[i]%mod;int len=1,ms=0;while(len<=l+l) len<<=1,++ms;for(int i=0;i<len;++i) rdr[i]=(rdr[i>>1]>>1)|((i&1)<<(ms-1));ntt(aa,len,1),ntt(bb,len,1);for(int i=0;i<len;++i) aa[i]=1ll*aa[i]*bb[i]%mod;ntt(aa,len,0);while(s--){int nn=rd(),mm=rd(),kk=rd(),ans=0,lim=min(min(l,kk),mm);for(int i=0;i<=lim;++i)ans=(ans+1ll*aa[i]/**fac[i]%mod*iac[i]%mod*/*iac[mm-i]%mod*fac[nn-i]%mod*iac[kk-i]%mod)%mod;ans=1ll*ans*inv(C(nn,kk))%mod*fac[mm]%mod*(nn>=kk?iac[nn-kk]:0)%mod;printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/smyjr/p/10992554.html

luogu P2791 幼儿园篮球题相关推荐

  1. 洛谷 P2791 幼儿园篮球题

    洛谷 P2791 幼儿园篮球题 https://www.luogu.org/problemnew/show/P2791 我喜欢唱♂跳♂rap♂篮球 要求的是:\(\sum_{i=0}^kC_m^iC_ ...

  2. P2791 幼儿园篮球题

    复制Markdown  展开 题目背景 众所周知,全民制作幼儿园园龄两年半的蔡徐坤同学喜欢唱.跳.rap 和篮球.而作为欧文的老师,他的篮球技术自然比 ikun 们要强得多. 题目描述 全民制作幼儿园 ...

  3. 洛谷P2791 幼儿园篮球题

    题目描述 题解 可以列出式子∑i=0k(im)(k−in−m)iL(kn)\frac{\sum_{i=0}^k(_i^m)(_{k-i}^{n-m})i^L}{(_k^n)}(kn​)∑i=0k​(i ...

  4. 洛谷·幼儿园篮球题【including范德蒙德卷积,二项式反演

    初见安~时隔良久我又回来写多项式了[靠 还是放在题目前面吧,简单讲一下这两个东西. 一.范德蒙德卷积 可以理解为:在两个有n个石子和m个石子的堆里面共选k个石子的方案数.这样这个等式的成立就很显然了. ...

  5. 【题解】幼儿园篮球题(范德蒙德卷积+斯特林+NTT)

    [题解]幼儿园篮球题 题目就是要我们求一个式子 \[ \sum_{i=1}^{S}{\dfrac 1 {{M\choose m_i}{N-M\choose n_i-m_i}}}\sum_{j=0}^{ ...

  6. luogu2791 幼儿园篮球题 第二类斯大林数(特)卡常NTT

    我真的是***的 原本应该是乘以iLi^LiL 但是因为 iL=∑j=0L\{Lj\}(ij)j!i^L=\sum_{j = 0}^L {L \brace j} \binom{i}{j} j! iL= ...

  7. [LGP2791] 幼儿园篮球题

    你猜猜题怎么出出来的? 显然第\(i\)场的答案为 \[ \frac{1}{\binom{n_i}{m_i}\binom{n_i}{k_i}}\sum_{x=0}^{k_i}\binom{n_i}{m ...

  8. Luogu2791 幼儿园篮球题【斯特林数,数学】

    题目链接:洛谷 我一开始不知道$N,M$有什么用处,懵逼了一会儿,结果才发现是输入数据范围... $$\begin{aligned}\binom{n}{k}Ans&=\sum_{i=0}^k\ ...

  9. 【洛谷2791】 幼儿园篮球题 第二类斯特林数+NTT

    求 \(\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}i^L\) \((1\leqslant n,m\leqslant 2\times 10^7,1\leqsla ...

最新文章

  1. mysql 执行计划extra_MySQL执行计划extra中的using index 和 using where using index 的区别...
  2. HEVC 编解码资源
  3. 全国计算机网络教学研讨会,历届全国高校计算机网络教学研讨会
  4. android unity 关闭应用_Unity 之 唤起调用 Android 其它应用app的方法
  5. 5.2创建socket
  6. java判断是否为linux,java判断是否Linux操作系统,判断OS操作系统类型工具类
  7. ubuntu8.04自动挂载硬盘分区
  8. C#操作十六进制数据以及十进制与十六进制互相转换
  9. Visio2013里面的大括号
  10. ppt太大怎么压缩变小?ppt压缩方法和步骤
  11. 死亡、疾病、意外,如何面对?
  12. java后端getmonth_Java中的LocalDateTime getMonth()方法
  13. WannaCryptor 勒索蠕虫样本深度技术分析
  14. 近三年六级作文题目汇总
  15. Yan LeCun会是AI界的居里夫人吗?
  16. 静态通讯录+动态版通讯录
  17. backports/lzma/_lzmamodule.c:115:18: fatal error: lzma.h: No such file or directory serWarning: Coul
  18. mac启动idea后显示“idea”意外退出
  19. iterm2安装记录
  20. 从事医院计算机网络维护工作,医院信息科岗位职责

热门文章

  1. 怎么查看python是否安装好了pyinstaller_Python PyInstaller安装和使用教程(详解版)...
  2. java thread signal_java — Thread之CountDownLatch的使用
  3. 每天一道LeetCode-----在字符方格中查找某个单词
  4. 华为鸿蒙os什么运行内存多大,华为公布鸿蒙OS 2.0硬件安装要求:只要128K内存就能跑...
  5. fatal error C1070: mismatched wabtags.h
  6. GetOpenFileName的简单使用实例
  7. c语言程序设计现代方法(2th)第12章答案(自己胡乱编写的答案,持续更新)
  8. Mysql 图像二进制保存-Blocb、TinyBlob、MediumBlob、LongBlob
  9. [BUUCTF-pwn]——wdb_2018_2nd_easyfmt
  10. c 语言中unsigned char类型变量占用内存大小,C数据类型