题面

我们需要知道这样一个东西(大概叫 斯特林公式?)

$S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$

那么就是推啊

$=\sum\limits_{i=0}^n\sum\limits_{j=0}^iS(i,j)*2^j*j!$

然后问题来了,因为后面还有$2^j$和$j!$,我们发现这里展开斯特林数也没用,所以我们要把它们甩出去

因为$j>i$时$S(i,j)==0$,所以让后面求和到$n$,然后前提$2^j$和$j!$

$=\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)*2^j*j!$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^nS(i,j)$

展开斯特林数

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$

一般我们会把$C(j,k)$拆开来消掉前面的$\frac{i}{j!}$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k\frac{j!}{k!(j-k)!}(j-k)^i$

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}(-1)^k\frac{1}{k!(j-k)!}(j-k)^i$

那后面这个东西明显的分成了两部分:和$k$有关的和和$j-k$有关的

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}\frac{(-1)^k}{k!}\frac{(j-k)^i}{(j-k)!}$

使用高中老师教给我们的等比数列求和公式

$=\sum\limits_{j=0}^n2^j*j!\sum\limits_{i=0}^n\sum\limits_{k=0}^{j}\frac{(-1)^k}{k!}\frac{(j-k)^{i+1}-1}{(j-k-1)(j-k)!}$

这样和是一定的,所以用NTT卷出来后面的然后前面的$O(n)$求和就可以了

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,mod=;
int a[*N],b[*N],rev[*N],fac[N],inv[N];
int n,ni,G,Gi,pw,ans;
void exGCD(int a,int b,int &x,int &y)
{
if(!b) {x=,y=; return;}
exGCD(b,a%b,y,x),y-=a/b*x;
}
int Qpow(int x,int k)
{
if(!k) return ;
if(k==) return x;
int tmp=Qpow(x,k/);
return k%?1ll*tmp*tmp%mod*x%mod:1ll*tmp*tmp%mod;
}
int Inv(int x)
{
int xx,yy;
exGCD(x,mod,xx,yy);
return (xx%mod+mod)%mod;
}
void NTT(int *arr,int len,int typ)
{
for(int i=;i<=len;i++)
if(rev[i]>i) swap(arr[rev[i]],arr[i]);
for(int i=;i<=len;i<<=)
{
int lth=i>>,ort=Qpow(~typ?G:Gi,(mod-)/i);
for(int j=;j<len;j+=i)
{
int ori=,tmp;
for(int k=j;k<j+lth;k++,ori=1ll*ori*ort%mod)
{
tmp=1ll*ori*arr[k+lth]%mod;
arr[k+lth]=(arr[k]-tmp+mod)%mod;
arr[k]=(arr[k]+tmp)%mod;
}
}
}
if(typ==-)
{
int ni=Inv(len);
for(int i=;i<=len;i++)
arr[i]=1ll*arr[i]*ni%mod;
}
}
void Init()
{
scanf("%d",&n);
G=,Gi=Inv(G),fac[]=inv[]=pw=;
for(int i=;i<=n;i++)
fac[i]=1ll*fac[i-]*i%mod;
inv[n]=Inv(fac[n]);
for(int i=n-;i;i--)
inv[i]=1ll*inv[i+]*(i+)%mod;
for(int i=;i<=n;i++)
a[i]=(i%)?mod-inv[i]:inv[i]; b[]=,b[]=n+;
for(int i=;i<=n;i++)
b[i]=1ll*(Qpow(i,n+)-)*Inv(i-)%mod*inv[i]%mod;
}
void Prework()
{
int len=; while(len<=*n+) len<<=;
for(int i=;i<=len;i++)
rev[i]=(rev[i>>]>>)+(i&)*(len>>);
NTT(a,len,),NTT(b,len,);
for(int i=;i<=len;i++) a[i]=1ll*a[i]*b[i]%mod;
NTT(a,len,-);
}
int main()
{
Init(),Prework();
for(int i=;i<=n;i++,pw=pw*%mod)
ans+=1ll*pw*fac[i]%mod*a[i]%mod,ans%=mod;
printf("%d",ans);
return ;
}

解题:HEOI 2016 求和的更多相关文章

  1. [TJOI 2016&HEOI 2016]求和

    Description 题库链接 求 \[f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\times 2^j \times (j!)\] \(S(i, j)\) 表示第二类斯 ...

  2. [HEOI 2016] sort

    [HEOI 2016] sort 解题报告 码线段树快调废我了= = 其实这题貌似暴力分很足,直接$STL$的$SORT$就能$80$ 正解: 我们可以二分答案来做这道题 假设我们二分的答案为$a$, ...

  3. 「HEOI 2016/TJOI 2016」求和

    题目链接 戳我 \(Solution\) 先化简式子: \[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end {Bmatrix}*2^j ...

  4. [TJOI 2016&HEOI 2016]排序

    Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  5. HEOI 2016 游记

    闲来无事,把这玩意儿补上. OI生涯中第一次正经的考试.挂的很惨. Day -1 不小心把机油(雾)sm惹毛了. 好像没啥别的事儿. Day 0 说好了上午直接去机房,然而临时说让我们上完前两节课再去 ...

  6. 数据结构(并查集||树链剖分):HEOI 2016 tree

    [注意事项] 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对于35% 的数据,1<=N,Q ...

  7. 字符串[未AC](后缀自动机):HEOI 2016 str

    超级恶心,先后用set维护right,再用主席树维护,全部超时,本地测是AC的.放心,BZOJ上还是1S限制,貌似只有常数优化到一定境界的人才能AC吧. 总之我是精神胜利了哦耶QAQ #include ...

  8. [HEOI 2016] seq

    题解: 发现多决策且明显无后效性,果断dp,那么转移方程F[i]=F[j]+1 设R[I]为改变之后的最大值,L[i]为改变之后的最小值 由于只能改变一个元素 所以转移的条件是 (j<i &am ...

  9. [ HEOI 2016 ] 树

    \(\\\) Description 给出一颗树,开始只有 \(1\) 号节点有标记. \(\ C\ x\) 对 \(x\) 号节点打标记 \(\ Q\ x\) 查询 \(x\) 号节点深度最深的有标 ...

随机推荐

  1. 《The Mythical Man-Month(人月神话)》读后感(1)

    临近考试周,这里我通过平时阅读的<人月神话>十九个章节和知乎.简书等网页中网友们对<人月神话>的读后感,对书中各个章节进行简单的总结,以下均为个人手打观点的思考与整合,仅供大家 ...

  2. python FTP服务器实现(Python3)

    创建一个ftp.py文件(Linux环境),插入以下代码: from pyftpdlib.authorizers import DummyAuthorizer from pyftpdlib.handl ...

  3. 互评Beta版本——杨老师粉丝群——Pinball

    互评beta版本    杨老师粉丝群——<PinBall> 一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着年龄的增长, ...

  4. 互评Beta版本——可以低头,但没必要——取件帮

    基于NABCD评论作品,及改进建议 1. 根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 取件帮是一款有偿互助取件的微信小程序,很大程度上解决了学生因为距离.时间等原因无法取快递的 ...

  5. Notes of Daily Scrum Meeting(11.19)

    Notes of Daily Scrum Meeting(11.19) 现在工程项目进入尾声了,我们的项目中还有一些问题需要解决,调试修改起来进度比较慢,所以昨天就没有贴出项目 进度,今天的团队工作总 ...

  6. YQCB冲刺第二周第二天

    今天的任务依然为实现查看消费明细的功能. 遇到的问题为从数据库中分类读取,实现图标的显示. 站立会议为: 任务面板为:

  7. beat冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  8. 剑指offer:二位数组中的查找

    准备找实习期间,复习一下数据相关内容,刷刷题. 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样 ...

  9. Teamwork(The third day of the team)

    在确定了第一个spring后我们就开始了各自的工作,不过由于大家都在专注于自己的工作并且由于近段时间的作业及各方面的事情都很多,没有来得及每天都更新一个博客,因此,我们现在把落下的博客都补上,很多事情 ...

  10. 重学 以太网的mac协议的CSMA/CD

    之前上课一直模糊的CSMA/CD进行系统性整理. CSMA/CD (Carrier Sense Multiple Acess/Collision Detect)应用在OSI的 数据链路层 在以太网中, ...