bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化
[Tjoi2016&Heoi2016]求和
Time Limit: 40 Sec Memory Limit: 128 MB
Submit: 679 Solved: 534
[Submit][Status][Discuss]
Description
在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。
.png)
Input
输入只有一个正整数
Output
输出f(n)。由于结果会很大,输出f(n)对998244353(7 × 17 × 223 + 1)取模的结果即可。1 ≤ n ≤ 100000
Sample Input
Sample Output
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 第二类斯特林数 等比数列求和优化的更多相关文章
- bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 第二类斯特林数展开式: \( S(i,j) = \frac{1}{j!} \sum\l ...
- BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)
题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...
- 【BZOJ4555】求和(第二类斯特林数,组合数学,NTT)
[BZOJ4555]求和(第二类斯特林数,组合数学,NTT) 题面 BZOJ 题解 推推柿子 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)·j!·2^j\] \[=\sum_{i= ...
- 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...
- 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! ...
- 【bzoj4555】[Tjoi2016&Heoi2016]求和(NTT+第二类斯特林数)
传送门 题意: 求 \[ f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix} i \\ j \end{Bmatrix}2^jj! \] 思路: 直接将第二类斯特林 ...
- BZOJ4555 [Tjoi2016&Heoi2016]求和 【第二类斯特林数 + NTT】
题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + ...
- 【BZOJ4555】【TJOI2016】【HEOI2016】求和 (第二类斯特林数+NTT卷积)
Description 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: $$f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\tim ...
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
随机推荐
- C++11中initializer lists的使用
Before C++11,there was no easy way to do things like initialize a std::vector or std::map(or a custo ...
- elasticsearch 拼音+ik分词,spring data elasticsearch 拼音分词
elasticsearch 自定义分词器 安装拼音分词器.ik分词器 拼音分词器: https://github.com/medcl/elasticsearch-analysis-pinyin/rel ...
- Hibernate-ORM:06.Hibernate中三种状态
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flu ...
- 剁了xp,醉了win7
装完win7,安装各种软件完毕,重启,然并卵. cpu,内存飙升!! svchost.exe这个进程内存发疯了一样往上飙升 从 几十兆 到占用1个多G, 纳尼, 总共物理内存才2G. ╮(╯▽╰) ...
- 手把手教你写css3通用动画
之前接了几个微信里的项目,类似电子邀请函,什么分析报告这样的项目, 对css3动画要求十分高,每个页面客户几乎都有天马行空的想法,或者说设计师有这样的想法.众所周知css3里的keyframe写好了就 ...
- webpack配置别名alias
在webpack.config.js中,通过设置resolve属性可以配置查找“commonJS/AMD模块”的基路径,也可以设置搜索的模块后缀名,还可以设置别名alias.设置别名可以让后续引用的地 ...
- CPU拓扑结构
本篇旨在认识一下以下三种CPU拓扑结构分别是什么: Symmetric multiprocessing (SMP) Non-uniform memory access (NUMA) Simultane ...
- Datenode无法启动
执行start-dfs.sh后,或者执行datenode没有启动.很大一部分原因是因为在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令 这时主节点namenode的clus ...
- 移动端webapp如何隐藏浏览器的导航栏
webapp如何隐藏浏览器的导航栏 在webapp开发中,手机浏览器的导航栏会让我们的页面看起来很怪异,这个时候我们就需要将导航栏给隐藏起来,隐藏的方法十分简单,只需要在head头中加入以下几行代码就 ...
- 完整Android开发基础入门博客专栏
博客地址:http://www.runoob.com/w3cnote/android-tutorial-contents.html