[bzoj3625][Codeforces 250 E]The Child and Binary Tree(生成函数+多项式运算+FFT)

3625: [Codeforces Round #250]小朋友和二叉树

Time Limit: 40 Sec  Memory Limit: 256 MB
Submit: 650  Solved: 283
[Submit][Status][Discuss]

Description

我们的小朋友很喜欢计算机科学,而且尤其喜欢二叉树。
考虑一个含有n个互异正整数的序列c[1],c[2],...,c[n]。如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合{c[1],c[2],...,c[n]}中,我们的小朋友就会将其称作神犇的。并且他认为,一棵带点权的树的权值,是其所有顶点权值的总和。
给出一个整数m,你能对于任意的s(1<=s<=m)计算出权值为s的神犇二叉树的个数吗?请参照样例以更好的理解什么样的两棵二叉树会被视为不同的。
我们只需要知道答案关于998244353(7*17*2^23+1,一个质数)取模后的值。

Input

第一行有2个整数 n,m(1<=n<=10^5; 1<=m<=10^5)。
第二行有n个用空格隔开的互异的整数 c[1],c[2],...,c[n](1<=c[i]<=10^5)。

Output

输出m行,每行有一个整数。第i行应当含有权值恰为i的神犇二叉树的总数。请输出答案关于998244353(=7*17*2^23+1,一个质数)取模后的结果。

Sample Input

样例一:
2 3
1 2
样例二:
3 10
9 4 3
样例三:
5 10
13 10 6 4 15

Sample Output

样例一:
1
3
9
样例二:
0
0
1
1
0
2
4
2
6
15
样例三:
0
0
0
1
0
1
0
2
0
5

HINT

 

对于第一个样例,有9个权值恰好为3的神犇二叉树:

 

Source

VFleaKing & pyx1997 感谢wyl8899提供中文翻译

https://www.cnblogs.com/neighthorn/p/6497364.html

利用了二叉树的递归定义,注意空树情况要加一,因为生成函数的$x^0$为$0$,也就是默认了根节点必须有数。

剩下的就是多项式开根和逆元了。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=l; i<=r; i++)
 4 typedef long long ll;
 5 using namespace std;
 6 
 7 const int N=(1<<18)+100,P=998244353,g=3,inv2=(P+1)/2;
 8 int n,x,m,c[N],a[N],f[N],t[N],ib[N],rev[N];
 9 
10 int ksm(ll a,int b){
11    ll res;
12    for (res=1; b; a=(a*a)%P,b>>=1)
13       if (b & 1) res=res*a%P;
14    return res;
15 }
16 
17 void DFT(int a[],int n,int f){
18    rep(i,0,n-1) if (i<rev[i]) swap(a[i],a[rev[i]]);
19    for (int i=1; i<n; i<<=1){
20       ll wn=ksm(g,(f==1) ? (P-1)/(i<<1) : (P-1)-(P-1)/(i<<1));
21       for (int j=0,p=i<<1; j<n; j+=p){
22          ll w=1;
23          for (int k=0; k<i; k++,w=1ll*w*wn%P){
24             int x=a[j+k],y=1ll*w*a[i+j+k]%P;
25             a[j+k]=(x+y)%P; a[i+j+k]=(x-y+P)%P;
26          }
27       }
28    }
29    if (f==-1){
30       int inv=ksm(n,P-2);
31       rep(i,0,n-1) a[i]=1ll*a[i]*inv%P;
32    }
33 }
34 
35 void inverse(int a[],int b[],int l){
36    if (l==1){ b[0]=ksm(a[0],P-2); return; }
37    inverse(a,b,l>>1);
38    int n=1,L=0; while (n<(l<<1))n<<=1,L++;
39    rep(i,0,n-1) rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));
40    rep(i,0,l-1) t[i]=a[i];
41    rep(i,l,n-1) t[i]=0;
42    DFT(t,n,1); DFT(b,n,1);
43    rep(i,0,n-1) b[i]=1ll*b[i]*(2-1ll*t[i]*b[i]%P+P)%P;
44    DFT(b,n,-1);
45    rep(i,l,n-1) b[i]=0;
46 }
47 
48 void Sqrt(int a[],int b[],int l){
49    if (l==1) { b[0]=1; return; }
50    Sqrt(a,b,l>>1);
51    int n=1,L=0; while (n<(l<<1)) n<<=1,L++;
52    rep(i,0,n-1) ib[i]=0;
53    inverse(b,ib,l);
54    rep(i,0,n-1) rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));
55    rep(i,0,l-1) t[i]=a[i];
56    rep(i,l,n-1) t[i]=0;
57    DFT(t,n,1); DFT(b,n,1); DFT(ib,n,1);
58    rep(i,0,n-1) b[i]=1ll*inv2*(b[i]+1ll*t[i]*ib[i]%P)%P;
59    DFT(b,n,-1);
60    rep(i,l,n-1) b[i]=0;
61 }
62 
63 int main(){
64    freopen("bzoj3625.in","r",stdin);
65    freopen("bzoj3625.out","w",stdout);
66    scanf("%d%d",&n,&m); c[0]=1;
67    rep(i,1,n) scanf("%d",&x),c[x]-=4;
68    rep(i,0,m) if (c[i]<0) c[i]+=P;
69    int len=1; while (len<=m) len<<=1;
70    Sqrt(c,a,len);
71    a[0]++; if (a[0]>=P) a[0]-=P;
72    inverse(a,f,len);
73    rep(i,1,m) printf("%d\n",f[i]*2%P);
74    return 0;
75 }

 

转载于:https://www.cnblogs.com/HocRiser/p/8270671.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

子序列进阶问题

题目&#xff1a; 有一个数组&#xff0c;让找到两个不重复的连续子序列A,B &#xff0c;求Max(Sum(A)-Sum(B) 分析&#xff1a; AB必定连续&#xff0c;设两端连接处index为{X&#xff0c;x1}&#xff0c;X可取0~n-1 设F(x)为连接处index为{X&#xff0c;x1}时 Max(Sum(A)…

day5-shelve模块

一、概述前面章节我们讲述了json和pickle模块的序列化和反序列化处理&#xff0c;他们有一个不足是在python 3中不能多次dump和load&#xff0c;shelve模块则可以规避这个问题。shelve模块是一个简单的k,v将内存数据通过文件持久化的模块&#xff0c;可以持久化任何pickle可支持…

程序员:请你不要对业务「置之不理」

成长是条孤独的路&#xff0c;一个人会走得更快&#xff1b;有志同道合者同行&#xff0c;会走得更远。本篇内容整理自 21 天鲲鹏新青年计划线上分享内容。鲲鹏新青年计划是由 TGO 鲲鹏会组织的线上分享活动&#xff0c;希望能帮助更多同学一起学习、成长。12 月 28 日&#xf…

在Ubuntu系统下如何将chrome浏览器的bookmarks导出到本地

1. 打开chrome浏览器在页面的右上角点击那个三个小点的位置&#xff0c;找到bookmarks&#xff0c;然后点击bookmarks manager,然后在organize右侧大倒三角下选择&#xff0c;export bookmarks to HTML&#xff0c;选择要保存的位置&#xff0c;利用同样的方法下次就可以直接导…

028 -bash-4.1$ 出现故障的原理及解决办法?

最近在搭建分布式的时候&#xff0c;出现了这个问题&#xff0c;很不爽。下面是我的解决方式。 1.在用户下删除bash rm -rf /home/beifeng/.bash* 2.拷贝 cp /etc/skel/.bash* /home/beifeng 3.退出&#xff0c;再进入用户 4.解释 set |grep -i ps1 转载于:https://www.cnblogs…

李彦宏千字愿景内部信:10次提到“用户”

中新网1月17日电 1月17日&#xff0c;百度公司创始人、董事长兼CEO李彦宏发出一封内部信&#xff0c;信中&#xff0c;李彦宏向员工阐述了百度愿景&#xff1a;成为最懂用户&#xff0c;并能帮助人们成长的全球顶级高科技公司。他提出&#xff0c;百度要持续创新&#xff0c;“…

spring-boot 速成(8) 集成druid+mybatis

spring-boot与druid、mybatis集成&#xff08;包括pageHelper分页插件&#xff09;, 要添加以下几个依赖项: compile(mysql:mysql-connector-java:6.0.5)compile(tk.mybatis:mapper-spring-boot-starter:1.1.1)compile(org.mybatis.spring.boot:mybatis-spring-boot-starter:1.…

我们怎样确保从大数据计算中获得价值

我们怎样确保从大数据计算中获得价值 支持大数据方案并不是在硬件以及软件层次终止&#xff0c;企业要想真正地从大数据中受益&#xff0c;领导者必须改变思考与对待信息的方式。 我们怎样确保从大数据计算中获得价值&#xff1f; 当所有可用数据都可用时&#xff0c;大数据…

青海省多地日降水量突破历史极值

受高原槽和西北冷空气的共同影响&#xff0c;青海省海西州茫崖等多地日降水量突破历史极值。 李万花 摄 受高原槽和西北冷空气的共同影响&#xff0c;青海省海西州茫崖等多地日降水量突破历史极值。 李万花 摄 中新网西宁1月18日电 (孙睿 赵海梅)记者18日从青海省气象局获悉&am…

ORB-SLAM2中四叉树管理特征点

当从图像金字塔中的每一层图像上提取特征点之后&#xff0c;都要先用四叉树技术对这些特征点进行管理 //该类中定义了四叉树创建的函数以及树中结点的属性 //bool bNoMore&#xff1a; 根据该结点中被分配的特征点的数目来决定是否继续对其进行分割 //DivisionNode()&#xff…

SharePoint Search之(七)Search result- 结果源

在使用搜索引擎的时候。非常多情况下&#xff0c;用户希望限定一下搜索范围&#xff0c;以便更加easy找到想要的结果。在SharePoint 2013的search里&#xff0c;也支持类似的功能&#xff0c;SharePoint 默认提供了几种范围&#xff1a; 在SharePoint&#xff0c;这个叫Search …

旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图

1 月 16 日&#xff0c;人工智能独角兽旷视科技发布了机器人战略&#xff0c;以及自 2018 年 4 月收购艾瑞思机器人&#xff0c;进军机器人领域的最新进展——智能协同大脑河图。在会上&#xff0c;旷视还大笔一挥&#xff0c;决定投入 20 亿元&#xff0c;用于打造物流仓储上下…

「JupyterLab」 Jupyter Notebook 新生代IDE模式页面

参考&#xff1a;Overview 安装&#xff1a; $ pip install jupyterlab 启动&#xff08;不是jupyter notebook&#xff09;&#xff1a; $ jupyter lab Jupyterlab中最好用的就是显示csv数据。CSV数据显示效果&#xff1a; 安装插件 jupyterlab是和jupyter notebook隔离的&…

PAT(乙级)1009

1009. 说反话 (20)给定一句英语&#xff0c;要求你编写程序&#xff0c;将句中所有单词的顺序颠倒输出。 输入格式&#xff1a;测试输入包含一个测试用例&#xff0c;在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成&#xff0c;其中单词是由英文字母&…

库存扣减问题

2019独角兽企业重金招聘Python工程师标准>>> 并发减库存 并发扣库存问题总结 库存扣减还有这么多方案&#xff1f; | 架构师之路 转载于:https://my.oschina.net/u/2939155/blog/3004363

HSRPSTPACL

1 HSRP配置 1.1 问题 在企业网络到外部的连接方案中&#xff0c;要求不高的条件下可以是单出口。一旦该出口线路出现问题&#xff0c;整个企业网络就不能连接到外网了。为了使得企业网络到外网连接的高可用性&#xff0c;可以设置两个以上的出口&#xff0c;然而多个出口对…

java 的 CopyOnWriteArrayList类

初识CopyOnWriteArrayList 第一次见到CopyOnWriteArrayList&#xff0c;是在研究JDBC的时候&#xff0c;每一个数据库的Driver都是维护在一个CopyOnWriteArrayList中的&#xff0c;为了证明这一点&#xff0c;贴两段代码&#xff0c;第一段在com.mysql.jdbc.Driver下&#xff0…

科技的趋势!AI将进军了37%的企业

2019独角兽企业重金招聘Python工程师标准>>> 市场研究机构Gartner调查了全球89个国家的逾3,000名信息长&#xff08;CIO&#xff09;&#xff0c;显示有37%的企业已经或打算于近期内部署人工智能&#xff08;AI&#xff09;&#xff0c;在4年内成长270%。Gartner研究…

CMakeLists.txt编写规则

在PROJECT_SOURCE_DIR下新建了src, include, lib, bin四个子文件夹。 src文件夹用来存放所有的.cpp文件&#xff0c;include文件夹用来存储所有的.h文件&#xff0c; lib中存放生成的自己编写的共享库&#xff0c; bin中存放所有的可执行文件 用SET来设置.exe可执行文件和共享…