Codeforces Round #250 (Div. 1)E. The Child and Binary Tree
题意:有一个集合,求有多少形态不同的二叉树满足每个点的权值都属于这个集合并且总点权等于i
题解:先用生成函数搞出来\(f(x)=f(x)^2*c(x)+1\)
然后转化一下变成\(f(x)=\frac{2}{1+\sqrt{1-4*c(x)}}\)
然后多项式开根和多项式求逆即可(先对下面的项开根,然后再求逆)
多项式开根:
\(B(x)^2=A(x) \bmod x^{ \lfloor \frac{n}{2} \rfloor}\)
\(B'(x)^2=A(x) \bmod x^{ \lfloor \frac{n}{2} \rfloor}\)
\(B(x)^2-B'(x)^2\equiv 0\),\((B(x)+B'(x))*(B(x)-B'(x))\equiv 0\),取\(B(x)=B'(x)\)
\(B(x)^2-2*B(x)*B'(x)+B'(x)^2\equiv0\),
\(B(x)\equiv \frac{A(x)+B'(x)^2}{2*B'(x)}\)
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 998244353
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
using namespace std;
const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=100000+10,maxn=400000+10,inf=0x3f3f3f3f;
ll a[N<<3],b[N<<3],c[N<<3],d[N<<3],tmp[N<<3],inv2=qp(2,mod-2);
int rev[N<<3];
void getrev(int bit)
{
for(int i=0;i<(1<<bit);i++)
rev[i]=(rev[i>>1]>>1) | ((i&1)<<(bit-1));
}
void ntt(ll *a,int n,int dft)
{
for(int i=0;i<n;i++)
if(i<rev[i])
swap(a[i],a[rev[i]]);
for(int step=1;step<n;step<<=1)
{
ll wn=qp(3,(mod-1)/(step*2));
if(dft==-1)wn=qp(wn,mod-2);
for(int j=0;j<n;j+=step<<1)
{
ll wnk=1;
for(int k=j;k<j+step;k++)
{
ll x=a[k];
ll y=wnk*a[k+step]%mod;
a[k]=(x+y)%mod;a[k+step]=(x-y+mod)%mod;
wnk=wnk*wn%mod;
}
}
}
if(dft==-1)
{
ll inv=qp(n,mod-2);
for(int i=0;i<n;i++)a[i]=a[i]*inv%mod;
}
}
void pol_inv(int deg,ll *a,ll *b)
{
if(deg==1){b[0]=qp(a[0],mod-2);return ;}
pol_inv((deg+1)>>1,a,b);
int sz=0;while((1<<sz)<=deg)sz++;
getrev(sz);int len=1<<sz;
for(int i=0;i<deg;i++)tmp[i]=a[i];
for(int i=deg;i<len;i++)tmp[i]=0;
ntt(tmp,len,1),ntt(b,len,1);
for(int i=0;i<len;i++)
b[i]=(2ll-tmp[i]*b[i]%mod+mod)%mod*b[i]%mod;
ntt(b,len,-1);
for(int i=deg;i<len;i++)b[i]=0;
}
void pol_sqrt(int deg,ll *a,ll *b)
{
if(deg==1){b[0]=1;return ;}
pol_sqrt((deg+1)>>1,a,b);
int sz=0;while((1<<sz)<=deg)sz++;
getrev(sz);int len=1<<sz;
for(int i=0;i<len;i++)d[i]=0;
pol_inv(deg,b,d);
for(int i=0;i<deg;i++)tmp[i]=a[i];
for(int i=deg;i<len;i++)tmp[i]=0;
ntt(tmp,len,1),ntt(b,len,1),ntt(d,len,1);
for(int i=0;i<len;i++)
b[i]=(tmp[i]*d[i]%mod+b[i])%mod*inv2%mod;
ntt(b,len,-1);
for(int i=deg;i<len;i++)b[i]=0;
}
int main()
{
int n,m;scanf("%d%d",&n,&m);
for(int i=0,x;i<n;i++)
{
scanf("%d",&x);
a[x]=mod-4;
}
a[0]=1;
int len=1;while(len<=m)len<<=1;
pol_sqrt(len,a,b);
++b[0];
pol_inv(len,b,c);
for(int i=1;i<=m;i++)printf("%lld\n",c[i]*2%mod);
return 0;
}
/********************
********************/
Codeforces Round #250 (Div. 1)E. The Child and Binary Tree的更多相关文章
- Codeforces Round #250 (Div. 1) D. The Child and Sequence 线段树 区间取摸
D. The Child and Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...
- Codeforces Round #250 (Div. 1) B. The Child and Zoo 并查集
B. The Child and Zoo Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/438/ ...
- Codeforces Round #250 (Div. 1) A. The Child and Toy 水题
A. The Child and Toy Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/438/ ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence (线段树)
题目链接:http://codeforces.com/problemset/problem/438/D 给你n个数,m个操作,1操作是查询l到r之间的和,2操作是将l到r之间大于等于x的数xor于x, ...
- Codeforces Round #250 (Div. 2)—A. The Child and Homework
好题啊,被HACK了.曾经做题都是人数越来越多.这次比赛 PASS人数 从2000直掉 1000人 被HACK 1000多人! ! ! ! 没见过的科技啊 1 2 4 8 这组数 被黑的 ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence(线段树)
D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...
- Codeforces Round #250 (Div. 1) D. The Child and Sequence
D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...
- Codeforces Round #250 (Div. 2) D. The Child and Zoo 并查集
D. The Child and Zoo time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- Codeforces Round #250 (Div. 2)B. The Child and Set 暴力
B. The Child and Set At the children's day, the child came to Picks's house, and messed his house ...
随机推荐
- R语言 union、setdiff、insect
union 求两个向量的并集集合可以是任何数值类型 union(x=1:3, y=2:5)[1] 1 2 3 4 5 union(x=c("abc", "12" ...
- 订单BOM、销售BOM、标准BOM
订单BOM.销售BOM.标准BOM 訂單BOM: 是實際生產時用的BOM, 在標準BOM和銷售BOM基礎上增減物料的BOM銷售BOM: 是為特定客戶設定的BOM, 在主檔數據層次上的BOM, 在生 ...
- Windows下使用命令安装Python的scipy库出错的解决
平时使用Python都是在Sublime下使用,不想使用IDE.使用各种库时安装也就是使用pip安装即可.来说说今天自己遇到的一个问题:使用scipy数学库时,使用命令: pip install sc ...
- Linux——vi的使用
记录一下vi的一些使用指令,蓝色部分是比较常用的,其中使用过的重新进行了描述,极少部分是未使用过的,还有一些未使用也未记录进来,后续再来补充修正: 参考资料:http://cn.linux.vbird ...
- Codeforces Round #135 (Div. 2) D. Choosing Capital for Treeland dfs
D. Choosing Capital for Treeland time limit per test 3 seconds memory limit per test 256 megabytes i ...
- 前端html5/css基础知识
https://www.cnblogs.com/clschao/articles/10073124.html
- [osg][osgEarth][原]基于OE自定义自由飞行漫游器(第二版)
在初级版上,进行新的漫游方式调整 头文件: #pragma once //南水之源 20180101 #include <osgGA/CameraManipulator> #include ...
- eclipse中启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误
原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者jdk并配置好环境变量.(2)copy一个jvm.dll放在该目录下. 原因2:eclipse的版本与jre或者jdk版本不一致 ...
- 解决在Vue项目中时常因为代码缩进导致页面报错的问题
前言 如果我们初次使用vue-cli来构建单页SPA应用,在撸代码的过程中有可能会遇到这种因为代码缩进导致 页面报错的问题,导致我们烦不胜烦.接下来我们就来看一看如何解决这个小问题... erro原因 ...
- AtCoder Regular Contest 103 E Tr/ee
Tr/ee 思路:按照下图所示连接 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #inclu ...