题面

传送门

一句话题意:

给定$n\leq 1e9,k\leq 1e7,T\leq 1e9$

设全集$U=\lbrace 1,2,3,...n\rbrace $,求$(min_{x\in S}\lbrace S\rbrace (S\subseteq U, \lvert S \rvert =k))^T$的期望

重要思想

注意,在遇到包含

思路

首先,通过枚举$S$集合最小值选取哪个数,可以得到:

$Ans(k)=\sum_{i=1}^n \binom{n-i}{k-1} T^i$

然后,通过枚举$S$集合最小值至少是多少,并且每次累加比上一次还大的可能性,可以得到:

$Ans(k)=T\binom{n}{k}+\sum_{i=1}^{n-1} \binom{n-i}{k}T^i(T-1)$

发现这个式子的后面一部分可以表示成第一个式子:

$Ans(k)=T\binom{n}{k}+(T-1)Ans(k+1)$

从$Ans(n)$开始往下累加一下,可以得到:

$Ans(k)=T(\sum_{i=0}{n-k}\binom{n}{k+i}(T-1)i)=T(\sum_{i=k}n\binom{n}{k}(T-1){i-k}$

这个式子要$O(n-k)$的时间,做不了,考虑怎么把它变成能算的$O(k)$

考虑二项式定理:$\sum_{i=0}^n (T-1)i\binom{n}{i}=(T-1+1)n=T^n$

所以$Ans(k)=\frac{T}{(T-1)k}(Tn-\sum_{i=0}^{k-1} (T-1)^i\binom{n}{i})$

就可以直接算了

最后不要忘了除以$\binom{n}{k}$,求得是期望

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cassert>
#define MOD 998244353
#define ll long long
using namespace std;
inline int read(){
int re=0,flag=1;char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') flag=-1;
ch=getchar();
}
while(isdigit(ch)) re=(re<<1)+(re<<3)+ch-'0',ch=getchar();
return re*flag;
}
inline int qpow(int a,int b){
int re=1;
while(b){
if(b&1) re=1ll*re*a%MOD;
a=1ll*a*a%MOD;b>>=1;
}
return re;
}
int n,k,A;int f[10000010],finv[10000010];
void init(){
int i,len=10000000;
f[0]=f[1]=finv[0]=finv[1]=1;
for(i=2;i<=len;i++) f[i]=1ll*f[i-1]*i%MOD;
finv[len]=qpow(f[len],MOD-2);
for(i=len;i>2;i--) finv[i-1]=1ll*finv[i]*i%MOD;
for(i=1;i<=k;i++) f[i]=1ll*f[i-1]*(n-i+1)%MOD;
}
int C(int x,int y){
return 1ll*f[y]*finv[y]%MOD;
}
int main(){
n=read();k=read();A=read();
if(A==1){puts("1");return 0;}
init();int i,ans=1ll*A*qpow(qpow(A-1,k),MOD-2)%MOD,tot=qpow(A,n),p=1;
for(i=0;i<k;i++){
tot=(1ll*tot-1ll*p*C(n,i)%MOD+MOD)%MOD;
p=1ll*p*(A-1)%MOD;
}
printf("%lld\n",1ll*ans*tot%MOD*qpow(C(n,k),MOD-2)%MOD);
}

[NOI.AC省选模拟赛3.23] 集合 [数学]的更多相关文章

  1. [NOI.AC省选模拟赛3.23] 染色 [点分治+BFS序]

    题面 传送门 重要思想 真的是没想到,我很久以来一直以为总会有应用的$BFS$序,最终居然是以这种方式出现在题目中 笔记:$BFS$序可以用来处理限制点对距离的题目(综合点分树使用) 思路 本题中首先 ...

  2. NOI.AC省选模拟赛第一场 T1 (树上高斯消元)

    link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...

  3. [NOI.AC省选模拟赛3.31] 星辰大海 [半平面交]

    题面 传送门 思路 懒得解释了......也是比较简单的结论 但是自己看到几何就退缩了...... 下周之内写一个计算几何的学习笔记! Code #include<iostream> #i ...

  4. [NOI.AC省选模拟赛3.31] 附耳而至 [平面图+最小割]

    题面 传送门 思路 其实就是很明显的平面图模型. 不咕咕咕的平面图学习笔记 用最左转线求出对偶图的点,以及原图中每个边两侧的点是谁 建立网络流图: 源点连接至每一个对偶图点,权值为这个区域的光明能量 ...

  5. [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]

    题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...

  6. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

  7. [noi.ac省选模拟赛]第10场题解集合

    题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...

  8. [noi.ac省选模拟赛]第11场题解集合

    题目   比赛界面. T1   比较简单.容易想到是求鱼竿的最大独立集.由于题目的鱼竿可以被分割为二分图,就可以想到最大匹配.   尝试建边之后会发现边的数量不小,但联系题目性质会发现对于一条鱼竿,它 ...

  9. [noi.ac省选模拟赛20200606]赌怪

    题目   点这里看题目. 分析   先特判掉\(K=2\)的情况.   首先可以考虑到一个简单 DP :   \(f(i)\):前\(i\)张牌的最大贡献.   转移可以\(O(n^2)\)地枚举区间 ...

随机推荐

  1. PyCharm+QT Designer整合

    CMD下使用pip安装PyQt4或者PYQT5 这里要注意,你下载的PYQT5不包含QT designer 还要:pip3 install PyQt5-tools,好像Pyqt5中将designer分 ...

  2. 虚拟机服务没有启动的 CentOS 和 Ubuntu 无法上网

    测试用 vmware 安装 OSX,安装补丁时要停止 vmware 的服务.如下图: 结果忘记启动了,导致 centos\ubuntu 等所有虚拟机都无法上网...所有的 启动这四个服务后,一切恢复正 ...

  3. 如何在hadoop中使用外部的python程序文件

    业务场景大概是这样,我需要在公司hadoop集群上对博文进行结巴分词.我的数据是存储在hive表格中的,数据量涉及到五百万用户三个月内发的所有博文. 首先对于数据来说,很简单,在hive表格中就是两列 ...

  4. Python3 time模块&datetime模块&random模块

    ''' time模块 ''' # import time # print(help(time)) # help()提供帮助 # print(time.time()) # 1970年开始到现在的秒数(时 ...

  5. linux io 学习笔记(02)---条件变量,管道,信号

    条件变量的工作原理:对当前不访问共享资源的任务,直接执行睡眠处理,如果此时需要某个任务访问资源,直接将该任务唤醒.条件变量类似异步通信,操作的核心:睡眠.唤醒. 1.pthread_cond_t  定 ...

  6. linux execl()函数

    关于execl()函数族的用法不在赘述,其他博主介绍的很详细.下面说下作者在使用该函数时所犯的错误: 作者想通过使用execl()函数在子进程中调用其他函数,起初楼主是 这样用的: if((a = e ...

  7. WCF入门三[WCF宿主]

    一.概述 WCF程序必须在宿主上运行,也就是WCF服务必须寄宿在某一个windows的进程中,可以是IIS.控制台程序.窗体程序.WAS以及所有.net程序等程序进程中.在我用VS2013创建WCF服 ...

  8. Linux初步——常用简单命令

    散乱的记录,目前是边学边用,以后有机会再整理 curl命令 发起一个HTTP请求,如:curl "http://www.baidu.com" 加上-I选项查看HTTP协议头的信息, ...

  9. DDD领域驱动设计基本理论知识总结(转)

    领域驱动设计之领域模型 为什么建立一个领域模型是重要的 领域通用语言(UBIQUITOUS LANGUAGE) 将领域模型转换为代码实现的最佳实践 领域建模时思考问题的角度 领域驱动设计的经典分层架构 ...

  10. 【多校联合】(HDU6043)KazaQ's Socks

    [多校联合](HDU6043)KazaQ's Socks 一条纯粹的水题,记录下只是因为自己错的太多而已. 原因在于对数据的细节的把握不佳. 原题 KazaQ's Socks Time Limit: ...