P4091 [HEOI2016/TJOI2016]求和

题目描述

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

现在他想计算这样一个函数的值:

\[f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\times 2^j \times (j!)
\]

\(S(i, j)\)表示第二类斯特林数,递推公式为:

\[S(i, j) = j \times S(i - 1, j) + S(i - 1, j - 1), 1 \le j \le i - 1
\]

边界条件为:

\[S(i, i) = 1(0 \le i), S(i, 0) = 0(1 \le i)
\]

你能帮帮他吗?

输入输出格式

输入格式:

输入只有一个正整数

输出格式:

输出\(f(n)\)。由于结果会很大,输出\(f(n)\)对\(998244353(7 × 17 × 2^{23} + 1)\)取模的结果即可。

说明

对于\(50\%\)数据\(1 ≤ n ≤5000\)

对于\(100\%\)数据\(1 ≤ n ≤ 100000\)


迷迷糊糊的乱推...

\[\begin{aligned}
&\sum_{i=0}^n\sum_{i=0}^i{i\brace j}2^jj!\\
=&\sum_{i=0}^n\sum_{i=0}^n{i\brace j}2^jj!\\
=&\sum_{j=0}^n2^jj!\sum_{i=0}^n{i\brace j}\\
=&\sum_{j=0}^n2^jj!\sum_{i=0}^n\sum_{k=0}^j\frac{(-1)^k}{k!}\frac{(j-k)^i}{(j-k)!}\\
=&\sum_{j=0}^n2^jj!\sum_{k=0}^j\frac{(-1)^k}{k!}\sum_{i=0}^n\frac{(j-k)^i}{(j-k)!}
\end{aligned}
\]

\[A_i=\frac{(-1)^i}{i!},B_i=\sum_{k=0}^n\frac{k^i}{k!}
\]

然后卷一下子就行了。

注意一点,\(B_0=1\),这个要代入原式的定义式得到。


Code:

#include <cstdio>
#include <algorithm>
const int N=(1<<18)+10;
const int mod=998244353,G=3,Gi=332748118;
#define mul(a,b) (1ll*(a)*(b)%mod)
#define add(a,b) ((a+b)%mod)
int n,A[N],B[N],len=1,L=-1,turn[N],ifac[N],fac[N];
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
void NTT(int *a,int typ)
{
for(int i=1;i<len;i++) if(i<turn[i]) std::swap(a[i],a[turn[i]]);
for(int le=1;le<len;le<<=1)
{
int wn=qp(typ?G:Gi,(mod-1)/(le<<1));
for(int p=0;p<len;p+=le<<1)
{
int w=1;
for(int i=p;i<p+le;i++,w=mul(w,wn))
{
int tx=a[i],ty=mul(w,a[i+le]);
a[i]=add(tx,ty);
a[i+le]=add(tx,mod-ty);
}
}
}
if(!typ)
{
int inv=qp(len,mod-2);
for(int i=0;i<len;i++) a[i]=mul(a[i],inv);
}
}
int main()
{
scanf("%d",&n);
while(len<=n<<1) len<<=1,++L;
for(int i=0;i<len;i++) turn[i]=turn[i>>1]>>1|(i&1)<<L;
fac[0]=1;for(int i=1;i<=n;i++) fac[i]=mul(fac[i-1],i);
ifac[n]=qp(fac[n],mod-2);
for(int i=n-1;~i;i--) ifac[i]=mul(ifac[i+1],i+1);
A[0]=1;
for(int i=1;i<=n;i++) A[i]=i&1?mod-ifac[i]:ifac[i];
B[0]=1,B[1]=n+1;
for(int i=2;i<=n;i++) B[i]=mul(qp(i,n+1)-1,mul(qp(i-1,mod-2),ifac[i]));
NTT(A,1),NTT(B,1);
for(int i=0;i<len;i++) A[i]=mul(A[i],B[i]);
NTT(A,0);int ans=0;
for(int i=0;i<=n;i++) ans=add(ans,mul(qp(2,i),mul(fac[i],A[i])));
printf("%d\n",ans);
return 0;
}

2018.12.23

洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告的更多相关文章

  1. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  2. 洛谷 P2824 [HEOI2016/TJOI2016]排序 解题报告

    P2824 [HEOI2016/TJOI2016]排序 题意: 有一个长度为\(n\)的1-n的排列\(m\)次操作 \((0,l,r)\)表示序列从\(l\)到\(r\)降序 \((1,l,r)\) ...

  3. [洛谷P4091][HEOI2016/TJOI2016]求和

    题目大意:给你$n(n\leqslant10^5)$,求:$$\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix ...

  4. 洛谷 P2261 [CQOI2007]余数求和 解题报告

    P2261 [CQOI2007]余数求和 题意: 求\(G(n,k)=\sum_{i=1}^n k \ mod \ i\) 数据范围: \(1 \le n,k \le 10^9\) \(G(n,k)\ ...

  5. 【题解】P4091 [HEOI2016/TJOI2016]求和

    [题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...

  6. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  7. 洛谷_Cx的故事_解题报告_第四题70

    1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h>   struct node {     long x,y,c; ...

  8. [HEOI2016/TJOI2016]游戏 解题报告

    [HEOI2016/TJOI2016]游戏 看起来就是个二分图匹配啊 最大化匹配是在最大化边数,那么一条边就代表选中一个坐标内的点 但是每一行不一定只会有一个匹配 于是把点拆开,按照'#'划分一下就好 ...

  9. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

随机推荐

  1. 07-matplotlib-箱线图

    import numpy as np import matplotlib.pyplot as plt ''' 箱形图(Box-plot)又称为盒须图,盒式图,或 箱线图: 是一种用在显示一组数据分散情 ...

  2. asp.net core如何修改程序监听的端口

    asp.net core 默认监听的5000和5001端口,要修改为其他端口有几种方法. 1.硬编码.优点是直观,缺点是每次修改端口都得重新编译程序. public class Program { p ...

  3. mysql添加一个字段(

    mysql添加一个字段(在指定的一个字段后面) 举个栗子:alter table inquiry add error_code varchar(3) after add_time; 说明:alter ...

  4. BugPhobia展示篇章:学霸在线系统Alpha阶段展示

    0x00:序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet yo ...

  5. Daily Scrum (2015/10/28)

    昨天DEV们完成了一部分代码风格的修整.今晚在与其他组进行交流时我们发现我们的代码是需要在服务器上运行的,而且服务器是需要配置的,而且据说需要花一些时间.所以在编写代码之前PM提出我们应该先把服务器搭 ...

  6. OO第四次作业-对前三次作业总结

    第一次作业由于直接没怎么学过java,全靠一星期速成,前几天看了java的语法,但是因为光看没有打代码,学习效果并不是特别好.由面向过程转向面向对象,不是特别清楚该怎么办,虽然写的是两个类,但实际上是 ...

  7. YQCB冲刺周第四天

    上图站立会议 任务看板: 今天的任务:做登录身份的验证,区别普通用户和超级管理员 遇到的困难:中文乱码问题

  8. Task 6.2冲刺会议四 /2015-5-17

    今天主要是学习并熟悉了C#的开发流程,把他的文件的大体结构和每个组件之间的联系弄清楚之后.开始写服务器部分的内容.学习过程中,感觉网上的资料有些太鱼龙混杂了,不知道该怎么取舍.明天准备完善服务器的功能 ...

  9. 软工1816 · Beta冲刺(2/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成考试 确定历史记录页面与排行榜页面的前端页面风格 接下来的计划 & ...

  10. b1

    组长:吴晓晖 过去两天完成了哪些任务: 代码重构进行中,界面,预计两个beta单位完成 展示GitHub当日代码/文档签入记录 接下来的计划 更加人性化的推荐算法 还剩下哪些任务 有哪些困难 有哪些收 ...