为什么又是佳媛姐姐啊啊啊!


斯特林数在这道题中不好处理,直接拆开:

\[f(n)=\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}2^jj!
\]
\[=\sum_{j=0}^n2^jj!\sum_{i=0}^n\sum_{k=0}^j\frac{(-1)^k(j-k)^i}{k!(j-k)!}
\]
\[=\sum_{j=0}^n2^jj!\sum_{k=0}^j\frac{(-1)^k\sum\limits_{i=0}^n(j-k)^i}{k!(j-k)!}
\]

单独考虑后半部分。设 \(f(i)=\dfrac{(-1)^i}{i!},g(i)=\dfrac{\sum\limits_{k=0}^n i^k}{i!}=\dfrac{[i\ne 1](\dfrac{i^{n+1}-1}{i-1})+[i=1](n+1)}{i!}\)

那么答案即为:

\[\sum_{j=0}^n2^jj!(f\times g)(j)
\]

NTT求解,时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e5+5,p=998244353;
namespace NTT{
int rev[N],mx,k,m,qp,h;
struct dft{int fg[N];};
int qpow(int x,int y){
int re=1;
while(y){
if(y&1) re=re*x%p;
x=x*x%p,y>>=1;
}return re;
}void init(int n){
mx=1,k=0,rev[0]=0,h=m-1;
while(mx<=n) mx*=2,k++;
for(int i=0;i<mx;i++)
rev[i]=(rev[i>>1]>>1)|((i&1)<<(k-1));
qp=qpow(mx,p-2);
}void fmd(dft &a){
for(int i=m-1;i<mx;i++) if(a.fg[i])
a.fg[i%h]=(a.fg[i%h]+a.fg[i])%p,a.fg[i]=0;
}void ntt(dft &a,int fl){
for(int i=0;i<mx;i++)
if(i<rev[i]) swap(a.fg[i],a.fg[rev[i]]);
for(int i=1;i<mx;i*=2){
int om=qpow(fl?3:(p+1)/3,(p-1)/(i<<1));
for(int j=0,w=1;j<mx;j+=i*2,w=1)
for(int k=j;k<j+i;k++,w=w*om%p){
int x=a.fg[k],y=w*a.fg[k+i]%p;
a.fg[k]=(x+y)%p,a.fg[k+i]=(x-y+p)%p;
}
}if(fl) return;
for(int i=0;i<mx;i++)
a.fg[i]=a.fg[i]*qp%p;
}
}using namespace NTT;
int n;dft f,g;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n,init(n*2+1);
for(int i=0,sum,jc=1;i<=n;i++,jc=jc*i%p){
f.fg[i]=qpow(jc,p-2)*(1-i%2*2);
g.fg[i]=(qpow(i,n+1)-1)*qpow((i-1)*jc%p,p-2)%p;
if(i==1) g.fg[i]=(n+1)*jc%p;
}ntt(f,1),ntt(g,1);
for(int i=0;i<mx;i++)
f.fg[i]=f.fg[i]*g.fg[i]%p;
ntt(f,0);int ans=0;
for(int i=0,jc=1;i<=n;i++,jc=jc*i%p)
ans=(ans+qpow(2,i)*jc%p*f.fg[i])%p;
cout<<ans;
return 0;
}

[TJOI/HEOI2016] 求和 题解的更多相关文章

  1. 【BZOJ4555】[TJOI&HEOI2016]求和 斯特林数+NTT

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

  2. loj2058 「TJOI / HEOI2016」求和 NTT

    loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...

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

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

  4. 【BZOJ】4555: [Tjoi2016&Heoi2016]求和 排列组合+多项式求逆 或 斯特林数+NTT

    [题意]给定n,求Σi=0~nΣj=1~i s(i,j)*2^j*j!,n<=10^5. [算法]生成函数+排列组合+多项式求逆 [题解]参考: [BZOJ4555][Tjoi2016& ...

  5. 【BZOJ 4555】 4555: [Tjoi2016&Heoi2016]求和 (NTT)

    4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 315  Solved: 252 Des ...

  6. [BZOJ4555 TJOI2016 HEOI2016 求和]

    ​ 第一篇博客,请大家多多关照.(鞠躬 BZOJ4555 TJOI2016 HEOI2016 求和 题意: ​ 给定一个正整数\(n\)(\(1\leqq n \leqq100000\)),求: \[ ...

  7. BZOJ 4555: [Tjoi2016&Heoi2016]求和 [分治FFT 组合计数 | 多项式求逆]

    4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林 ...

  8. BZOJ 4555: [Tjoi2016&Heoi2016]求和 [FFT 组合计数 容斥原理]

    4555: [Tjoi2016&Heoi2016]求和 题意:求\[ \sum_{i=0}^n \sum_{j=0}^i S(i,j)\cdot 2^j\cdot j! \\ S是第二类斯特林 ...

  9. [HEOI2016]求和 sum

    [HEOI2016]求和 sum 标签: NTT cdq分治 多项式求逆 第二类斯特林数 Description 求\[\sum_{i=0}^n\sum_{j=0}^i S(i,j)×2^j×(j!) ...

  10. 「TJOI / HEOI2016」字符串

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

随机推荐

  1. Python实验:Socket编程

    实验六 Socket 编程 一.实验目标: 了解TCP协议原理.标准库socket 的用法.熟悉Socket 编程. 1.TCP协议原理: TCP(Transmission Control Proto ...

  2. 如何在 duxapp 中开发一个兼容 RN 的动画库

    Taro 一直以来都没有一个能兼容 RN 的动画方案,duxapp 中扩展了 createAnimation 方法,让这个方法兼容了 RN 端,下面让我们来看看实现思路 createAnimation ...

  3. AE对象序列化

    当我们编写AE程序时,通常会遇到需要存储某个AE对象的情况,比如Layer,Element,Map,Legend,NorthArrow等等这些.举个例子说明一下:在我们编辑Featurelayer时, ...

  4. 关于Git上传项目报错error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

    问题 今天用Git上传项目时,最后一步push时命令行报错 error: RPC failed; HTTP 413 curl 22 The requested URL returned error: ...

  5. 实用干货分享(3)- Git常用操作干货分享

    官方学习地址 https://git-scm.com/book/zh/v2 简单的代码提交流程 1. git status 查看工作区代码相对于暂存区的差别: 2. git add . 将当前目录下修 ...

  6. kubectl get deploy

    for i in `kubectl get deployments.apps -n nvpc-apps-02|grep -v NAME|awk '{print $1}'`; do kubectl ge ...

  7. LocalDateTime 简述

    Java 8 更新的部分内容中,有一部分代替了以往比较难用的 java.util.Date 类,并且创建了一套新的时间类型,该类型为: java.time.LocalDateTime. LocalDa ...

  8. Mybatis Plus条件构造器condition动态判断优化

    ConditionQueryWrapper package com.common.util; import com.baomidou.mybatisplus.core.conditions.query ...

  9. ChannelInboundHandlerAdapter和SimpleChannelInboundHandler区别

    ChannelInboundHandlerAdapter和SimpleChannelInboundHandler是我们在使用Netty处理Handler时候很常用的两个继承类,虽然说二者实现的功能大致 ...

  10. Qt编写安防视频监控系统23-图片地图

    一.前言 图片地图这个模块是后面新增加进去的,主要是安防领域还有很多应用场景是一个区域比如就一个学校,提供一个学校的平面图或者鸟瞰图,然后在该地图上放置对应的摄像机,双击该摄像机图标可以查看对应的实时 ...