bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555
第二类斯特林数展开式:
\( S(i,j) = \frac{1}{j!} \sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k}(j-k)^{i} \)
大概是容斥枚举空的盒子个数。https://www.cnblogs.com/gzy-cjoier/p/8426987.html
在这道题里,先把 j 提到前面,再把组合数展开,推一推式子发现 j 之后的那部分是卷积的形式。就能 O( nlogn + n )了。
别把 >>1 写成 <<1 !!!!!
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #define ll long long
- using namespace std;
- const int N=1e5+,M=(<<)+,mod=;
- int n,len,r[M],a[M],b[M],ans,jcn[N];
- void upd(int &x){x>=mod?x-=mod:;x<?x+=mod:;}
- int pw(int x,int k)
- {int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;}
- void ntt(int *a,bool fx)
- {
- for(int i=;i<len;i++)
- if(i<r[i])swap(a[i],a[r[i]]);
- for(int R=;R<=len;R<<=)
- {
- int Wn=pw( ,fx?(mod-)-(mod-)/R:(mod-)/R );
- for(int i=,m=R>>;i<len;i+=R)
- for(int j=,w=;j<m;j++,w=(ll)w*Wn%mod)
- {
- int x=a[i+j], y=(ll)w*a[i+m+j]%mod;
- a[i+j]=x+y; upd(a[i+j]);
- a[i+m+j]=x+mod-y; upd(a[i+m+j]);
- }
- }
- if(!fx)return ; int inv=pw(len,mod-);
- for(int i=;i<len;i++)a[i]=(ll)a[i]*inv%mod;
- }
- int main()
- {
- scanf("%d",&n);
- jcn[]=;for(int i=;i<=n;i++)jcn[i]=(ll)jcn[i-]*i%mod;
- jcn[n]=pw(jcn[n],mod-); for(int i=n-;i>=;i--)jcn[i]=(ll)jcn[i+]*(i+)%mod;
- for(int i=,fx=;i<=n;i++,fx=-fx)
- {
- a[i]=fx*jcn[i]+mod;upd(a[i]);
- }
- for(int i=;i<=n;i++)
- {
- int k=-i;
- if(!k)
- {
- b[i]=(ll)(n+)*jcn[i]%mod;
- }
- else
- {
- int d=pw(i,n+);
- if(k<)k+=mod; k=pw(k,mod-);
- b[i]=(ll)(+mod-d)*k%mod*jcn[i]%mod;
- }
- }
- for(len=;len<=n<<;len<<=);
- for(int i=;i<len;i++)r[i]=(r[i>>]>>)+((i&)?len>>:);//len>>1!! not <<1
- ntt(a,); ntt(b,);
- for(int i=;i<len;i++)a[i]=(ll)a[i]*b[i]%mod;
- ntt(a,);
- for(int i=,jc=,lj=;i<=n;i++,jc=(ll)jc*i%mod,lj<<=,upd(lj))
- ans=(ans+(ll)lj*jc%mod*a[i])%mod;
- printf("%d\n",ans);
- return ;
- }
bzoj 4555 [Tjoi2016&Heoi2016]求和——NTT+第二类斯特林数的更多相关文章
- bzoj 4555 [Tjoi2016&Heoi2016]求和 NTT 第二类斯特林数 等比数列求和优化
[Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 679 Solved: 534[Submit][S ...
- BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)
题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...
- BZOJ4555 [Tjoi2016&Heoi2016]求和 【第二类斯特林数 + NTT】
题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, 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
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 关于第二类斯特林数:https://www.cnblogs.com/Wuweizhen ...
- 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...
- BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)
题目链接 \(Description\) 求 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj!\]对998244353取模后的结果. \(n<=10^5\) \(Sol ...
- 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! \] 思路: 直接将第二类斯特林 ...
随机推荐
- idea中如何debug本地maven项目
方法一:使用maven中的jetty插件调试本地maven项目 1.打断点 2.右击“jetty:run”,选择Debug运行 3.浏览器发送http请求,开始调试 方法二:利用远程调试功能调试本地m ...
- iOS开发进阶 - 使用Carthage管理iOS第三方库
移动端访问不佳,请访问我的个人博客 最近在研究Swift,一不小心发现一个好的的管理iOS第三方库Carthage,就跟第一次使用CocoaPods时一样兴奋不已,在研究了大半天后终于能用了,使用起来 ...
- Spring注解(环境)
以数据库为例: 引入 c3p0数据源maven坐标 数据库驱动 @Configuration @PropertySource("classpath:/db.config.properties ...
- 重装window 7系统,从做一个u盘启动盘,到装系统,很不错
老毛桃U盘启动盘制作工具是现在最流行的U盘装系统和维护电脑的专用工具,一是制作简单,几乎100%支持所有U盘一键制作为启动盘,不必顾虑以前量产U盘考虑专用工具的问题.二是制作后工具功能强大,支持GHO ...
- Linux系统官网下载
CentOS-6.9-x86_64-bin-DVD1.isohttp://archive.kernel.org/centos-vault/6.9/isos/x86_64/CentOS-6.9-x86_ ...
- Android--第三方控件--okHttp
Android中有很多的第三方控件,其中OkHttp是一个很强大的用于网络加载的第三方框架,当然了,它的内部也是使用原生的代码封装好的.今天我们就来看一下OkHttp的简单用法: 说到网络请求,肯定就 ...
- CocoaPods学习系列5——错误集锦
这篇文章记录使用CocoaPods过程中遇到的一些错误. 1.error:include of non-modular header inside framework module 在自定义类库中,引 ...
- JDK安装配置教程
一.首先下载JDK的最新版本.可以去http://java.sun.com/javase/downloads/index.jsp下载最新版本JDK1.6.一切下载后选择安装路径,例如我选择安装在&qu ...
- Linux 实用指令之查看端口开启情况
netstat -ntlp 查看端口使用情况! netstat -ntlp | grep 80 查看具体的端口是否使用! # netstat -ntlp Active Internet connect ...
- caffe2 教程入门(python版)
学习思路 1.先看官方文档,学习如何使用python调用caffe2包,包括 Basics of Caffe2 - Workspaces, Operators, and Nets Toy Regres ...