loj2058 「TJOI / HEOI2016」求和 NTT

链接

loj

思路

\[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}^{i}S(i,j)·2^j·j!
\]

\[\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{n}S(i,j)·2^j·j!
\]

\[\sum\limits_{j=0}^{n}2^j·j!\sum\limits_{i=0}^{n}S(i,j)
\]

先看后边

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

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

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

\(f(j-k)=\sum\limits_{i=0}^{n}(j-k)^{i}\)等比数列求和。

\[\sum\limits_{k=0}^{j}\frac{(-1)^{k}}{k!}\frac{f(j-k)}{(j-k)!}
\]

nice,这很卷积,用NTT预处理就好了,然后后面的式子就很好求ans了。

\[\sum\limits_{j=0}^{n}2^j·j!\sum\limits_{k=0}^{j}\frac{(-1)^{k}}{k!}\frac{f(j-k)}{(j-k)!}$
## 坑点
f(x)要特判q=1和q=0。因为公式本来就不能做
其他的照的推出来的式子做就可以辣
## 代码
```cpp
#include <bits/stdc++.h>
using namespace std;
const int N=4e5+7,mod=998244353;
int n,ans,jc[N],a[N],b[N],limit=1,p,r[N];
int q_pow(int a,int b) {
int ans=1;
while(b) {
if(b&1) ans=1LL*a*ans%mod;
a=1LL*a*a%mod;
b>>=1;
}
return ans;
}
int inv(int a) {return q_pow(a,mod-2);}
int ntt(int *a,int type) {
for(int i=0;i<limit;++i)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int mid=1;mid<limit;mid<<=1) {
int Wn=q_pow(3,(mod-1)/(mid<<1));
for(int i=0;i<limit;i+=(mid<<1)) {
for(int j=0,w=1;j<mid;j++,w=1LL*w*Wn%mod) {
int x=a[i+j],y=1LL*w*a[i+j+mid]%mod;
a[i+j]=(x+y)%mod;
a[i+j+mid]=(x-y+mod)%mod;
}
}
}
if(type==-1) {
reverse(&a[1],&a[limit]);
int inv=q_pow(limit,mod-2);
for(int i=0;i<limit;++i) a[i]=1LL*a[i]*inv%mod;
}
}
int f(int x) {
if(!x) return 1;
if(x==1) return n+1;
return 1LL*(q_pow(x,n+1)-1)*inv(x-1)%mod;
}
int main() {
scanf("%d",&n);
jc[0]=1;for(int i=1;i<=n;++i) jc[i]=1LL*jc[i-1]*i%mod;
for(int i=0;i<=n;++i) a[i]=1LL*(i&1?(mod-1):1)*inv(jc[i])%mod;
for(int i=0;i<=n;++i) b[i]=1LL*f(i)*inv(jc[i])%mod;

while(limit<n+n) limit<<=1,p++;
for(int i=0;i<limit;++i)
r[i]=(r[i>>1]>>1)|((i&1)<<(p-1));
ntt(a,1),ntt(b,1);
for(int i=0;i<limit;++i) a[i]=1LL*a[i]*b[i]%mod;
ntt(a,-1);

for(int i=0;i<=n;++i)
ans=(ans+1LL*q_pow(2,i)*jc[i]%mod*a[i]%mod)%mod;
printf("%d\n",ans);
return 0;
}
```\]

loj2058 「TJOI / HEOI2016」求和 NTT的更多相关文章

  1. loj2058 「TJOI / HEOI2016」求和

    推柿子 第二类斯特林数的容斥表达 fft卡精度就用ntt吧qwq. #include <iostream> #include <cstdio> using namespace ...

  2. LOJ #2058「TJOI / HEOI2016」求和

    不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Sol ...

  3. 「TJOI / HEOI2016」求和 的一个优秀线性做法

    我们把\(S(i, j)j!\)看成是把\(i\)个球每次选择一些球(不能为空)扔掉,选\(j\)次后把所有球都扔掉的情况数(顺序有关).因此\(S(i, j)j! = i![x^i](e^x - 1 ...

  4. loj#2054. 「TJOI / HEOI2016」树

    题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> ...

  5. 「TJOI / HEOI2016」字符串

    「TJOI / HEOI2016」字符串 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 \(n\) 的字符串 \(s\),和 ...

  6. AC日记——#2054. 「TJOI / HEOI2016」树

    #2054. 「TJOI / HEOI2016」树 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include < ...

  7. AC日记——#2057. 「TJOI / HEOI2016」游戏 LOJ

    #2057. 「TJOI / HEOI2016」游戏 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include &l ...

  8. loj #2055. 「TJOI / HEOI2016」排序

    #2055. 「TJOI / HEOI2016」排序   题目描述 在 2016 年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个 ...

  9. loj#2059. 「TJOI / HEOI2016」字符串 sam+线段树合并+倍增

    题意:给你一个子串,m次询问,每次给你abcd,问你子串sa-b的所有子串和子串sc-d的最长公共前缀是多长 题解:首先要求两个子串的最长公共前缀就是把反过来插入变成最长公共后缀,两个节点在paren ...

随机推荐

  1. flask异常处理:abort、errorhandler、app_errorhandler,封装全局异常处理

    目录 1. abort() 1.1 使用方式一:传递一个错误码 1.2 使用方式二:传递一个json格式字符串 1.3 使用方式三:传递一个响应体 2. errorhandler 2.1 简单使用: ...

  2. framework7 总结之前遇到的问题和踩过的坑

    官网上写的案例比较简单明了,我这里就将我使用时踩过的坑做一个总结,与大家共勉! 最近使用framework,基本全靠浏览官方文档,当然,有遇到了许多的错误,开始不知道哪里出问题也很着急,到最后发现问题 ...

  3. SQL根据指定节点ID获取所有父级节点和子级节点

    --根据指定节点ID获取所有子节点-- WITH TEMP AS ( SELECT * FROM table_name WHERE Id=' --表的主键ID UNION ALL SELECT T0. ...

  4. spring cloud gateway 深入了解 - Predicate

    文章来源 spring cloud gateway 通过谓词(Predicate)来匹配来自用户的请求 为了方便,使用postman测试不同的谓词的效果 路径谓词(Predicate)—— 最简单的谓 ...

  5. k8s+jenkins(DevOps全流程)

    k8s集群搭建是参照别人的,链接找不到了.需要5台机器,3主2从,主最少搭建3台才能实现高可用. 流程jenkins打包代码 >> 把打包代码生成镜像 >> 备份镜像库旧镜像 ...

  6. 【转载】C#如何获取DataTable中某列的数据类型

    在C#的数据表格DataTable的操作中,有时候因为业务需要,我们需要获取到DataTable所有列或者某一列的数据类型,此时我们可以通过DataTable中的Columns属性对象的DataTyp ...

  7. Python 集合(Set)、字典(Dictionary)

    集合(Set) 集合是无序的,无序也就没有索引,不能进行索引相关的操作.无序,python解释器就不能通过索引(位置)区分集合中的相同元素,所以集合中不能有相同的元素. 集合用大括号{  }表示. 集 ...

  8. Linux CentOS7 安装FTP服务器

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_39680564/article/de ...

  9. 将java的jar包作为windows的服务来启动

    1.在idea中用maven将程序打成jar,放到运行的目录中. 2.去github上面下载winsw: https://github.com/kohsuke/winsw/releases 3. 将W ...

  10. Vagrant+VirtualBox虚拟环境

    Vagrant+VirtualBox虚拟环境 VagrantVirtualBox 软件安装 虚拟机基础配置 虚拟机创建 共享目录 配置网络 配置私有网络 配置公有网络 打包box与添加box 打包bo ...