解题:HEOI 2016 求和
我们需要知道这样一个东西(大概叫 斯特林公式?)
$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 求和的更多相关文章
- [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)\) 表示第二类斯 ...
- [HEOI 2016] sort
[HEOI 2016] sort 解题报告 码线段树快调废我了= = 其实这题貌似暴力分很足,直接$STL$的$SORT$就能$80$ 正解: 我们可以二分答案来做这道题 假设我们二分的答案为$a$, ...
- 「HEOI 2016/TJOI 2016」求和
题目链接 戳我 \(Solution\) 先化简式子: \[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end {Bmatrix}*2^j ...
- [TJOI 2016&HEOI 2016]排序
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- HEOI 2016 游记
闲来无事,把这玩意儿补上. OI生涯中第一次正经的考试.挂的很惨. Day -1 不小心把机油(雾)sm惹毛了. 好像没啥别的事儿. Day 0 说好了上午直接去机房,然而临时说让我们上完前两节课再去 ...
- 数据结构(并查集||树链剖分):HEOI 2016 tree
[注意事项] 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对于35% 的数据,1<=N,Q ...
- 字符串[未AC](后缀自动机):HEOI 2016 str
超级恶心,先后用set维护right,再用主席树维护,全部超时,本地测是AC的.放心,BZOJ上还是1S限制,貌似只有常数优化到一定境界的人才能AC吧. 总之我是精神胜利了哦耶QAQ #include ...
- [HEOI 2016] seq
题解: 发现多决策且明显无后效性,果断dp,那么转移方程F[i]=F[j]+1 设R[I]为改变之后的最大值,L[i]为改变之后的最小值 由于只能改变一个元素 所以转移的条件是 (j<i &am ...
- [ HEOI 2016 ] 树
\(\\\) Description 给出一颗树,开始只有 \(1\) 号节点有标记. \(\ C\ x\) 对 \(x\) 号节点打标记 \(\ Q\ x\) 查询 \(x\) 号节点深度最深的有标 ...
随机推荐
- Kubernetes探索学习003--关于Kubernetes的Pod
关于Pod 关于Pod我们要慢慢去体会去接受它去使用它,尤其是运维人员这块需要从逻辑上形成认识,首先理解Pod是Kubernetes项目的原子调度单位.为什么是Pod而不是单个DockerContai ...
- mongodb基本使用(三)
MongoDB 创建数据库 语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 如果你想查看所有数据库,可以使 ...
- LeetCode 657. Robot Return to Origin (C++)
题目: There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its ...
- spring boot之配置跨域
在启动类中配置 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override p ...
- 20135234mqy-——信息安全系统设计基础第六周学习总结
处理器体系结构 4.1 Y86指令集体系结构 4.1.1程序员可见状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态. 4.1.2 Y86指令 4个指令:irmovl, ...
- 【转】python 三种遍历list的方法
[转]python 三种遍历list的方法 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list ...
- 【贪心算法】POJ-3190 区间问题
一.题目 Description Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one wil ...
- DPDK flow_filtering 源码阅读
代码部分 main.c /*- * BSD LICENSE * * Copyright 2017 Mellanox. * * Redistribution and use in source and ...
- IO流的各种继承关系
- C++判断char*的指向
char *a = "Peter"; char b[] = "Peter"; ]; strcpy_s(c, , "Peter"); 这里a指 ...