A.集合



题面

不知道有没有用的传送门【滑稽

就是给你一个 包含 1~n 的集合,让你求它的大小为 k 的子集 s 的 \(T^{min(s)}\) 的期望值, T 为给出值, min(s) 表示 s 集合中的最小值

一般的,答案可以写作:

\[ANS=E(T^{min(s)} | s∈[n] ,|s|=k)
\]

其中 \([n]\) 表示 1~n 的全集 , \(|s|\) 表示集合 s 的大小(元素个数)

一道二项式定理的例题?虽说我根本做不到二项式定理那一步 23333

首先我们转化一下答案表达式,让它更可做:

\[ANS=\sum_{i=1}^n T^i ( ~^{n-i}_{k-1} )
\]

式子的意思就是说,我们先选择一个最小值,然后在比他大的元素中选出 k-1 个

至于这里为什么 i 从 1 到 k ? 因为 \(n-i\) 比 \(k-1\) 小的话不会产生贡献所以不会影响答案咯

然后我们发现答案也可以这么表示:

\[ANS=T( ~^{n}_k )+\sum_{i=1}^{n-1} (T-1)T^i (~^{n-i}_{~~~ k})
\]

然后我们发现这里后面的式子就是 k+1 时的 ANS ,于是我们就可以一直这么递归下去,那么答案就可以表示为:

\[ANS= T \sum_{i=k}^n (T-1)^{i-k}(~^{n}_i)
\]

\[ANS= T(T-1)^{-k} \sum_{i=k}^n (T-1)^{i}(~^{n}_i)
\]

用二项式定理化式子:

\[ANS= T (T-1)^{-k}~(T^n-\sum_{i=0}^{k-1} (T-1)^i(~^{n}_i))
\]

到了这里就非常可做了,因为后面的求和是 \(O(k)\) 的,至于组合数?看代码你就知道怎么处理了,然后就是快速幂打打就好了

但还有一个问题,我们要求期望,也就是说算出来的答案要除去方案数,方案数比较好想,就是:\(\sum_{i=1}^{n} (~_{k-1}^{n-i})\) ,这个怎么算?

我们把式子弄好看些:

\[\sum_{i=0}^{n-1} (~_{k-1}^{~~~i})
\]

其实这个东西的答案就是 \((~_ k^n)\) ,这个我们画画杨辉三角然后发现这玩意儿是一列下来的,然后加个零,一路加下来就发现答案停留在 \(C(n,k)\)

code

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define ll long long
using namespace std;
const int mod=998244353;
const int M=1e7+3; typedef int arr[M];
inline int mul(R int x,R int y){return 1ll*x*y%mod;}
inline int inc(R int x,R int y){return x+y>=mod?x+y-mod:x+y;}
inline int qpow(R int x,R int p=mod-2){ R int s=1;
for(;p;p>>=1,x=mul(x,x)) if(p&1) s=mul(s,x); return s;
} int n,k,T,ans,nC,nT; arr V,F;
int main(){ cin>>n>>k>>T,
ans=qpow(T,n),
nT=nC=V[0]=V[1]=F[0]=F[1]=1;
if(T==1) return !puts("1");
fp(i,2,k)
V[i]=mul(V[mod%i],mod-mod/i),
F[i]=mul(F[i-1],V[i]);
fp(i,0,k-1)
ans=inc(ans,mod-mul(nT,mul(nC,F[i]))),
nC=mul(nC,n-i),nT=mul(nT,T-1);
return !printf("%d\n",mul(mul(ans,mul(T,qpow(nT))),qpow(mul(nC,F[k]))));
}

可以看到上面处理组合数的方式是维护下降幂, 然后乘上 \(O(k)\) 处理出来的阶乘逆元 !简直不要太骚...

noi.ac 集合的更多相关文章

  1. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  2. NOI.AC 31 MST——整数划分相关的图论(生成树、哈希)

    题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要 ...

  3. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  4. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  5. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  6. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

  7. NOI.AC NOIP模拟赛 第二场 补记

    NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...

  8. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  9. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

随机推荐

  1. es安装的时候遇到的所有的坑

    不允许root用户启动. 解决办法,创建子用户. 在linux下需要注意.es默认不能用root用户启动.我们需要新建一个用户来启动. groupadd  es adduser  es-user    ...

  2. Kafka技术内幕 读书笔记之(四) 新消费者——新消费者客户端(二)

    消费者拉取消息 消费者创建拉取请求的准备工作,和生产者创建生产请求的准备工作类似,它们都必须和分区的主副本交互.一个生产者写入的分区和消费者分配的分区都可能有多个,同时多个分区的主副本有可能在同一个节 ...

  3. ant design环境搭建过程中遇到的问题--Windows-dva-cli

    基础的此处略去,nodejs和npm是前提. 1.官网介绍的是脚手架工具是antd-init,但是又建议真实项目中用dva-cli,所以博主就直接装的是dva-cli,这里主要是简单介绍下博主在Win ...

  4. PHP文件系统管理

    文件概念: 第一个是windows的文件,另一个php根据LINUX的文件,两者是有所不同的,我们说的页面基于windows的文件可以是是文件夹(也就是目录)或是文件,而php两者都必须有,它包含目录 ...

  5. ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory

    ubuntu16.04安装cuda8.0,tensorflow-gpu版本后,运行时报错: ImportError: libcudnn.so.5: cannot open shared object ...

  6. java使用类数组 报错Exception in thread "main" java.lang.NullPointerException

    源代码如下: Point[] points=new Point[n];//Point是一个类 for(int i=0;i<n;i++) { System.out.print("请输入x ...

  7. python-文件读写操作

    打开文件: f=open('test.txt',mode='r',encoding='utf-8') 参数1  文件名,若非当前路径,需指出具体路径 参数2   mode:   文件打开模式 r    ...

  8. 关于"Linux下使用Windows应用程序的尝试"总结

    首推 Flatpak .Flatpak爽啊,命令行启动能不爽吗!? 其他的: 0. AppImage:AppImage试了下,唉,启动TIM时就没反应,其他的应用没试过 1. crossover:收费 ...

  9. this与回调函数

    在c++里回调函数分2种: 全局函数:不包函在类的内部 或 类内部的静态函数 类内部函数(或叫 局部函数):需要通过实例化后的对象调用的 因c++是c的一层封装,所以类似c里struct内的函数 在传 ...

  10. zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for {root.path}

    1 异常结果 org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented ...