求和:fft,表达式化简
$f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} S(i,j) \times 2^j \times j!$
其中$S(i,j)$为第二类斯特林数,公式为$S(i,j)=\frac{1}{j!} \sum\limits_{k=0}^{j} (-1)^k C(j,k) (j-k)^i$
求$f(n)$,$n<=100000$,答案对$998244353(=2^{23} \times 7 \times 17 + 1)$取模
$f(n)=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times \sum\limits_{k=0}^{j} (-1)^k \times \frac{j!}{k! \times (j-k)!} \times (j-k)^i$
$=\sum\limits_{i=0}^{n} \sum\limits_{j=0}^{i} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{(j-k)^i}{(j-k)!} \times \frac{(-1)^k}{k!}$
$=\sum\limits_{j=0}^{n} 2^j \times j! \times \sum\limits_{k=0}^{j} \frac{\sum\limits_{i=0}^{n}(j-k)^i}{(j-k)!} \times \frac{(-1)^k}{k!}$
可以发现,$\sum\limits_{i=0}^{n}(j-k)^i$项就是一个等比数列求和,可以快速幂求出。
那么两个分数分别只与j-k和k有关了,相乘的话,就是卷积形式FFT求出,枚举最外层j即可。
Update10/04:
终于抽出时间码完啦,少打了一个等号调了半天~
#include<cstdio>
#define mod 998244353
#define int long long
int rev[],bin=,n,fac[],inv[],invv[],INV,sumpw[];
int a[],b[],sum;
int pow(int b,int t,int a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
void NTT(int *a,int opt){
for(int i=;i<bin;++i)if(i<rev[i])a[i]^=a[rev[i]]^=a[i]^=a[rev[i]];
for(int mid=,wn=pow(,mod->>);mid<bin;mid<<=,wn=pow(,(mod-)//mid*opt+mod-))
for(int i=;i<bin;i+=mid<<)
for(int j=,w=;j<mid;++j,w=w*wn%mod){
int x=a[i+j],y=a[i+j+mid]*w%mod;
a[i+j]=(x+y)%mod;a[i+j+mid]=(mod+x-y)%mod;
}
if(opt==-)for(int i=;i<bin;++i)a[i]=a[i]*INV%mod;
}
main(){
scanf("%lld",&n);
while(bin<=n<<)bin<<=;//printf("%lld\n",bin);
for(int i=;i<bin;++i)rev[i]=rev[i>>]>>|(i&)*bin>>;
INV=pow(bin,mod-);
fac[]=inv[]=invv[]=fac[]=inv[]=sumpw[]=;
for(int i=;i<=n;++i)fac[i]=fac[i-]*i%mod,invv[i]=-mod/i*invv[mod%i]%mod+mod,inv[i]=inv[i-]*invv[i]%mod;
sumpw[]=n+;for(int i=;i<=n;++i)sumpw[i]=(pow(i,n+)-)*invv[i-]%mod;
for(int i=;i<=n;++i)a[i]=sumpw[i]*inv[i]%mod,b[i]=pow(mod-,i)*inv[i]%mod;//,printf("%lld %lld\n",a[i],b[i]);
NTT(a,);NTT(b,);
for(int i=;i<bin;++i)a[i]=a[i]*b[i]%mod;
NTT(a,-);//for(int i=0;i<bin;++i)printf("%lld\n",a[i]);
for(int j=;j<=n;++j)sum=(sum+pow(,j)*fac[j]%mod*a[j])%mod;
printf("%lld\n",sum);
}
求和:fft,表达式化简的更多相关文章
- B/b.cpp:表达式化简,二分答案
不知道能不能粘题面于是不粘了. 首先声明这道题可以怎么水过: 随机化几万次操作,取最优答案. 暴力O(n2log n)可过. 不想打正解的可以走了. emm然而我的应该是正解,O(n log n). ...
- 【mongoDB高级篇②】大数据聚集运算之mapReduce(映射化简)
简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简.是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N台服务器同时来计算),但相较于grou ...
- HDU.2503 a/b + c/d (分式化简)
a/b + c/d Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- F. Anton and School 位运算 + 化简
http://codeforces.com/contest/734/problem/F 因为 x + y = (x & y) + (x | y) 有了这个公式后,然后应该手动模拟一下,把公式化 ...
- matlab化简符号表达式
化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...
- NOIP201402比例化简
比例化简 [问题描述]在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有 1498 人,反对的有 902 人,那么赞同与反对的比例可以简单的记为1498:9 ...
- YZOI Easy Round 2_化简(simplify.c/cpp/pas)
Description 给定一个多项式,输出其化简后的结果. Input 一个字符串,只含有关于字母x 的多项式,不含括号与分式,没有多余的空格. Output 一个字符串,化简后的多项式,按照次数从 ...
- 化简复杂逻辑,编写紧凑的if条件语句
当业务逻辑很复杂,涉及多个条件的真假,或者多种条件下都会执行同一动作时,如何编写紧凑的if语句呢?本文借由一个实际例子,利用数学的布尔逻辑整理条件,最终产生if语句. 问题 在<X3 重聚> ...
- 《Linear Algebra and Its Application》-chaper1-行化简法解决线性方程组
在实际生产生活中,需要我们解大量的线性方程组,例如是有探测.线性规划.电路等,这里我们便从理论角度建立一套解决线性方程组的体系. 线性方程组: 形如下面形式的方程组称为线性方程组. 回想起解决二元线性 ...
随机推荐
- Java 学习笔记之 线程Priority
线程Priority: 线程可以划分优先级,优先级较高的线程得到的CPU资源较多,也就是CPU优先执行优先级较高的线程对象中的任务. 设置线程优先级有助于帮助“线程规划器”确定在下一次选择哪个线程来优 ...
- Scala 学习笔记之集合(4)
集合的模式匹配操作: object CollectionDemo5 { def main(args: Array[String]): Unit = { //集合模式匹配1 val ls = List( ...
- FFmpeg(六) 播放视频之GLSurfaceView显示RGB数据
一.播放视频说明 1.两种方式播放视频 ①shader播放YUV,后面再介绍. ②RGB直接显示数据,简单.性能差,用到FFmpeg的格式转换,没有shader效率高.本文介绍这个方式. 2.GLSu ...
- 设计模式----创建型型模式之单件模式(Singleton pattern)
单件模式,又称单例模式,确保一个类只有一个实例,并提供全局访问点. 单件模式是比较简单且容易理解的一种设计模式.只有一个实例,通常的做法...TODO 类图比较简单,如下所示: 示例代码: 懒汉模式( ...
- 六、springboot 简单优雅是实现短信服务
前言 上一篇讲了 springboot 集成邮件服务,接下来让我们一起学习下springboot项目中怎么使用短信服务吧. 项目中的短信服务基本上上都会用到,简单的注册验证码,消息通知等等都会用到.所 ...
- liunx下安装MySQL
1.安装依赖包:yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bisonyum install -y perl-Module-Insta ...
- DOM操作方法、属性
话不多说直接上demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Spring Boot2 系列教程(十一)Spring Boot 中的静态资源配置
当我们使用 SpringMVC 框架时,静态资源会被拦截,需要添加额外配置,之前老有小伙伴在微信上问松哥 Spring Boot 中的静态资源加载问题:"松哥,我的 HTML 页面好像没有样 ...
- 实体对象属性和值转为键值对Dictionary
实体对象转为Dictionary键值对 /// <summary> /// 实体转键值对 /// </summary> /// <typeparam name=" ...
- 构造函数语义学——Copy Constructor 篇
构造函数语义学--Copy Constructor 篇 本文主要介绍<深度探索 C++对象模型>之<构造函数语义学>中的 Copy Constructor 构造函数的调用时机 ...