CF932E Team Work

你现在手里有\(n\)个人,你要选出若干个人来搞事情(不能不选),其中选择\(x\)个人出来的代价是\(x^k\),问所有方案的代价总和。

数据范围:\(1\le n \le 10^9,1\le k \le 5000\)

英语不好qwq...题目应该是这个意思吧

一句话题意:求

\[\sum\limits_{i=1}^n \binom{n}{i}i^k
\]

哇...这东西怎么算啊...

注意到\(k\)很小,把\(i^k\)用第二类斯特林数代替一下

\[\sum\limits_{i=1}^n \binom{n}{i}\sum\limits_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix}\binom{i}{j}j!
\]

交换求和顺序

\[\sum\limits_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix}j! \sum\limits_{i=1}^n \binom{n}{i}\binom{i}{j}
\]

后面俩组合数...咋整?写一下

\[\binom{n}{i}\binom{i}{j} = \frac{n!}{i!(n-i)!} \times \frac{i!}{j!(i-j)!}
\]

后面的\(j!\)和前面抵消了,\(i!\)也消没了 Nice!

\[\sum\limits_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix}\sum\limits_{i=1}^n \frac{n!}{(n-i)!(i-j)!}
\]

注意到分母上和为\(n-j\),我们像把他搞成组合数的形式,分子分母同时乘\((n-j)!\)

\[\frac{n!}{(n-i)!(i-j)!} = \frac{(n-j)!}{(n-i)!(i-j)!} \times \frac{n!}{(n-j)!}
\]

可以知道\(\frac{(n-j)!}{(n-i)!(i-j)!} = \binom{n-j}{n-i}\),再把第二个因子提到外面柿子变成了

\[\sum\limits_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix}\frac{n!}{(n-j)!}\sum\limits_{i=1}^n \binom{n-j}{n-i}
\]

注意到\(k \ge 1\),\(\begin{Bmatrix}k\\0\end{Bmatrix}=0\),就可以直接对第二个\(\sum\)组合数求和,得到

\[\sum\limits_{j=0}^k \begin{Bmatrix}k\\j\end{Bmatrix}n^{\underline{j}}2^{n-j}
\]

大力\(O(k^2)\)推第二类斯特林数,预处理下降幂就好了。

#include <bits/stdc++.h>
using namespace std;
const int P=1e9+7,N=5010;
inline int fpow(int x,int y)
{
int ret=1; for(x%=P;y;y>>=1,x=1ll*x*x%P)
if(y&1) ret=1ll*ret*x%P;
return ret;
}
inline int add(int x,int y){return (x+=y)>=P?x-P:x;}
inline int sub(int x,int y){return (x-=y)<0?x+P:x;}
int S[N][N],dwn[N],n,k;
int main()
{
scanf("%d%d",&n,&k);
dwn[0]=1; for(int i=1;i<=k;i++) dwn[i]=1ll*dwn[i-1]*(n-i+1)%P;
S[0][0]=1; for(int i=1;i<=k;i++)
for(int j=1;j<=i;j++)
S[i][j]=add(S[i-1][j-1],1ll*j*S[i-1][j]%P);
int ans=0,pw2=fpow(2,n),i2=fpow(2,P-2);
for(int j=0;j<=k;j++,pw2=1ll*pw2*i2%P)
ans=add(ans,1ll*S[k][j]*dwn[j]%P*pw2%P);
printf("%d\n",ans);
return 0;
}

[题解] CF932E Team Work的更多相关文章

  1. [CF932E]Team Work & [BZOJ5093]图的价值

    CF题面 题意:求\(\sum_{i=0}^{n}\binom{n}{i}i^k\) \(n\le10^9,k\le5000\) 模\(10^9+7\) BZOJ题面 题意:求\(n*2^{\frac ...

  2. CF932E Team Work(第二类斯特林数)

    题目 CF932E Team Work 前置:斯特林数\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ &\sum\limits_{i=1}^n C_ ...

  3. cf932E. Team Work(第二类斯特灵数 组合数)

    题意 题目链接 Sol 这篇题解写的非常详细 首先要知道第二类斯特灵数的一个性质 \[m^n = \sum_{i = 0}^m C_{n}^i S(n, i) i!\] 证明可以考虑组合意义:\(m^ ...

  4. CF932E Team Work——第二类斯特林数

    题解 n太大,而k比较小,可以O(k^2)做 想方设法争取把有关n的循环变成O(1)的式子 考虑用公式: 来替换i^k 原始的组合数C(n,i)一项,考虑能否和后面的系数分离开来,直接变成2^n处理. ...

  5. CF932E Team Work(第二类斯特林数)

    传送门:CF原网 洛谷 题意:给定 $n,k$,求 $\sum\limits^n_{i=1}\dbinom{n}{i}i^k\bmod(10^9+7)$. $1\le n\le 10^9,1\le k ...

  6. CF932E Team Work

    思路 第二类斯特林数和组合数推式子的题目 题目要求\(\sum_{i=1}^n \left(\begin{matrix}n \\ i \end{matrix} \right) i^k\) 一个性质 第 ...

  7. 【学术篇】CF932E Team Work && bzoj5093 图的价值

    两个题的传送门 对于CF这道题, 分别考虑每种可能的集合大小, 每个大小为\(k\)的集合数量有\(\binom nk\)个, 所以最后的答案就是 \[\sum_{i=0}^n\binom{n}{i} ...

  8. WC2019 填坑记

    2019年1月8日 1.Luogu P2147 [SDOI2008]洞穴勘测 (LCT模板题&LCT学习) 2019年1月9日 2.LuoguP3203 [HNOI2010]弹飞绵羊  (LC ...

  9. FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ

    因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...

随机推荐

  1. 三 基于Java数组手写循环队列

    Code: package dataStucture2.stackandqueue; /** * 手写循环队列 * * @param <E> */ public class MyLoopQ ...

  2. 五 Mybatis一对一关联查询的两种方式(基于resultType&基于resultMap)

    关联查询: 一个用户对应多个订单,一个订单只有一个用户 订单关联用户:两种方式 一:基于resultTYpe,一个与表关系一样的pojo实现 主表订单,从表用户 首先要有一个与关联查询表关系一样的po ...

  3. c#数据四种执行方法(ExecuteNonQuery)-----转载

    c#数据四种执行方法(ExecuteNonQuery)   1.使用ExecuteReader()操作数据库 2.使用ExecuteNonQuery()操作数据库 3.使用ExecuteScalar( ...

  4. [易语言][ExDui][Tutorial]1.NameSelector

    咕咕咕 尝试自己写组件对象被易语言的对象劝退后,我又回来写教程了. 相信上一章对如何创建窗口讲得足够透彻了,这一章上项目实战:点名器. 点名器这种简单的东西实在是经常被拿出来开刀啊. 还有一点,发现之 ...

  5. String类与StringBuffer类

    String类与StringBuffer类   一.String类和StringBuffer类的区别 String类是不可变类,新建的对象为不可变对象(String类的内容和长度是固定的),一旦被创建 ...

  6. Pycharm 报错 Environment location directory is not empty 解决

    新电脑clone项目后发现Project Interpreter无法配置, New environment 选择后无法应用, 鼠标悬停在Location 提示 Environment location ...

  7. Mac的VIM中delete键失效的原因和解决方案

    在Mac的键盘上实际是没有backspace这个键的.其实Mac的delete就是Windows的backspace,实现的都是向左删除的功能.Mac上如果要实现向右删除的功能需要使用⌘+delete ...

  8. 动态、指针field-symbols初探

    DATA: BEGIN OF STRUC, COMP1 VALUE ', COMP2 VALUE ', COMP3 TYPE STRING VALUE 'bruce king', END OF STR ...

  9. 关于syx的npy

    请认准官方女友----- STL 任何人在不得syx同意下不能传播其它谣言

  10. Button btn = sender as Button; //创建Button对象 这句话中Sencler和as是什么。怎么使用Sender和as

    ender是个object类型的变量名,通常都是事件的默认参数名,而这个变量存的是触发这个事件的控件,而as 可以理解为抽象,它把object类理的sender变量抽象成了(Button)类型.这样它 ...