[Tjoi2016&Heoi2016]求和

Time Limit: 40 Sec  Memory Limit: 128 MB
Submit: 679  Solved: 534
[Submit][Status][Discuss]

Description

在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。

现在他想计算这样一个函数的值:
S(i, j)表示第二类斯特林数,递推公式为:
S(i, j) = j ∗ S(i − 1, j) + S(i − 1, j − 1), 1 <= j <= i − 1。
边界条件为:S(i, i) = 1(0 <= i), S(i, 0) = 0(1 <= i)
你能帮帮他吗?

Input

输入只有一个正整数

Output

输出f(n)。由于结果会很大,输出f(n)对998244353(7 × 17 × 223 + 1)取模的结果即可。1 ≤ n ≤ 100000

Sample Input

3

Sample Output

87

HINT

 

Source

 

多谢大佬的blog,我自己写比较慢,所以直接贴了。

这题本来是来练多项式求逆的,但是好像其它方法也可以做。

然后就通过这样的方法解出了,我们都知道等比数列求和的第一项需要特殊考虑,所以g[1]=n

然后就是卷积的形式了,从n^2 log n----------->  n log n

 #include<cstring>
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm> #define ll long long
#define mod 998244353
#define G 3
#define N 100007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,num,L,inv;
int jc[N],ny[N],jcn[N];
ll a[N<<],b[N<<],rev[N<<]; int fast_pow(int a,int b)
{
int ans=;
while(b)
{
if (b&) ans=(ll)ans*a%mod;
a=(ll)a*a%mod;
b>>=;
}
return ans;
}
void NTT(ll *a,ll f)
{
for (ll i=;i<num;i++)
if (i<rev[i]) swap(a[i],a[rev[i]]);
for (ll i=;i<num;i<<=)
{
ll wn=fast_pow(G,(mod-)/(i<<));
for (ll j=;j<num;j+=(i<<))
{
ll w=;
for (ll k=;k<i;w=(ll)w*wn%mod,k++)
{
ll x=a[j+k],y=(ll)w*a[j+k+i]%mod;
a[j+k]=(x+y>=mod)?x+y-mod:x+y,a[j+k+i]=(x-y<)?x-y+mod:x-y;
}
}
}
if (f==-)
{
for (ll i=;i<num/;i++) swap(a[i],a[num-i]);
for (ll i=;i<num;i++) a[i]=(ll)a[i]*inv%mod;
}
}
int main()
{
n=read();
jc[]=,ny[]=,jcn[]=;
for (int i=;i<=n;i++)
jc[i]=(ll)jc[i-]*i%mod,ny[i]=fast_pow(i,mod-),jcn[i]=(ll)jcn[i-]*ny[i]%mod;
for (int i=;i<=n;i++)
a[i]=(ll)((i&)?-:)*jcn[i];
for (int i=;i<=n;i++)
b[i]=(ll)(fast_pow(i,n+)-i)*jcn[i]%mod*ny[i-]%mod;b[]=n;
for (num=;num<=*n;num<<=,L++);if (L) L--;inv=fast_pow(num,mod-);
for (int i=;i<=num;i++) rev[i]=(rev[i>>]>>)|((i&)<<L);
NTT(a,),NTT(b,);
for (int i=;i<num;i++)
a[i]=(ll)a[i]*b[i]%mod;
NTT(a,-);
int ans=;//第一项的等比数列的影响
for (int i=;i<=n;i++)
(ans+=(ll)fast_pow(,i)*jc[i]%mod*a[i]%mod)%=mod;
ans=(ans+mod)%mod;
printf("%d\n",ans);
}

bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化的更多相关文章

  1. bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 第二类斯特林数展开式: \( S(i,j) = \frac{1}{j!} \sum\l ...

  2. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  3. 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)

    [BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...

  4. 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...

  5. P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)

    传送门 首先,因为在\(j>i\)的时候有\(S(i,j)=0\),所以原式可以写成\[Ans=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j! ...

  6. 【bzoj4555】[Tjoi2016&Heoi2016]求和(NTT+第二类斯特林数)

    传送门 题意: 求 \[ f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end{Bmatrix}2^jj! \] 思路: 直接将第二类斯特林 ...

  7. BZOJ4555 [Tjoi2016&Heoi2016]求和 【第二类斯特林数 + NTT】

    题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + ...

  8. 【BZOJ4555】【TJOI2016】【HEOI2016】求和 (第二类斯特林数+NTT卷积)

    Description 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: $$f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\tim ...

  9. bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数

    [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 245  Solved: 128[Submit][Status][D ...

随机推荐

  1. java入门---基础语法&基础常识&编码规范&命名规范

        一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对 ...

  2. gp更新来的太快

    意外总是会发生 添加一个判断function的分支,过滤掉function,其实也考虑再进一步去分析它的作用,稍后再议. 更新一下 var gnp = { get: function(url) { r ...

  3. java反射操作类方法与属性

    package com.fanshe.test; public class User { private int age; private String email; private String u ...

  4. python基础——重访类型分类

    python基础--重访类型分类 对象根据分类来共享操作:例如,字符串.列表和元组都共享诸如合并.长度和索引等序列操作. 只有可变对象(列表.字典和集合)可以原处修改:我们不能原处修改数字,字符串.元 ...

  5. ubuntu自带的ibus输入法问题解决方法

    ubuntu自带的ibus有点问题,输入字的时候不知道是个什么模式. 在网上搜到一个解决方法. 终端下执行: ibus-daemon -drx 然后切换到拼音输入法,就正常了. 写下作为记录.

  6. 名片管理系统demo

    # 定义一个列表,用来储存名片 def cardInfors(): # 打印功能提示 print('欢迎使用名片管理系统v6.6.6') print('1:添加一个名片') print('2:删除一个 ...

  7. 【Linux运维】LNMP环境配置

    安装准备: Centos7.3 MYSQL5.6 PHP5.6 NGINX1.10.3 一.安装Mysql mysql:[root@host129 src]#cd /usr/local/src/ [r ...

  8. GFS文件系统

      1.1 分布式文件系统 1.1.1 什么是分布式文件系统 相对于本机端的文件系统而言,分布式文件系统(英语:Distributed file system, DFS),或是网络文件系统(英语:Ne ...

  9. CodeForces-455A Boredom

    题目链接 https://vjudge.net/problem/CodeForces-455A 题面 Description Alex doesn't like boredom. That's why ...

  10. [转载] python 解析xml 文件: SAX方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...