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. Java面试宝典(2020版)

    一.Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java ...

  2. 【Linux】CentOS7 打开关闭防火墙及端口

    一.centos7版本对防火墙进行加强,不再使用原来的iptables,启用firewalld1.firewalld的基本使用启动: systemctl start firewalld查状态:syst ...

  3. .net core mvc启动顺序以及主要部件4-MVC

    前面三章已经把MVC启动过程以及源代码做了讲解,本章开始正式MVC,mvc全称叫model view controller,也就是把表现层又细分三层,官网的图片描述: 默认创建了一个.net core ...

  4. 我的第一个netcore2.2 api项目搭建(三)

    上一章快速添加了swagger文档管理功能,我的第一个netcore2.2 api项目搭建(二) 这一章实现目标三:api添加身份验证功能 在实现该目标之前,先得理解netcore运行机制. 这是微软 ...

  5. protoc文件生成cs文件

    1.下载protoc工具  点击下载 2.下载解压后打开文件,其中有一个.bat文件,里面对应命令行如下: 编写如下命令行 protoc.exe -I=. --csharp_out=. --grpc_ ...

  6. Oracle使用中的常规操作总结

    写一篇在使用Oracle过程中一些常用的操作,以便于忘记的时候查看 一.创建用户和给用户赋予权限 create user 用户名 identified by 密码; --12c一下版本 create ...

  7. 使用JavaConfig配置SpringMVC

    目录结构 web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi ...

  8. kubernetes V1.16 Ingress-nginx部署

    Ingress 在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的.为了使外部的应用能够访问集群内的服务,在Kubernetes中可以通过NodePo ...

  9. JavaScript 事件(基础)

    一.事件 事件:触发-响应机制. 二.事件三要素 1.事件源:触发事件的元素 2.事件名称:发送了什么方式的事件 3.事件处理程序:事件触发后要执行的代码(函数形式) 三.事件的使用方式 1.获取元素 ...

  10. es数据二次开发统计展示

    案例1 在es查询中按照多列分组的时候 分组列的count值会越来越少 es默认隐藏了没有被分组匹配到的记录数  需要在查询的时候开启 2.开启显示没有被分组成功的记录 分组成功的记录加上分组miss ...