日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ #3625 CF #438E 小朋友和二叉树

發布時間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ #3625 CF #438E 小朋友和二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

清真多項式題

BZOJ #3625

codeforces #438E


題意

每個點的權值可以在集合$?S$中任取

求點權和恰好為$[1..n]$的不同的二叉樹數量

數據范圍全是$ 10^5$


$ Solution $?

設集合$?S$的生成函數為$ C$

考慮暴力$ DP$,枚舉當前根節點的權值以及左右子樹的權值

$f[0]=1$

$ f[x]=\sum\limits_{i=0}^x \sum\limits_{j=0}^{x-i}f[i]f[j]·[C[x-i-j]=1]$

化成生成函數形式即為

$ f=C·f^2+1$

其中$+1$是因為$ C$中不含常數項而多項式$ f$中含有值為$ 1$的常數項

二次方程求解得

$f=\frac{1 \pm \sqrt{1-4C}}{2C}$

因為分母沒有常數項,分子顯然也不應有常數項

$f=\frac{1 - \sqrt{1-4C}}{2C}$

分母沒有常數項不能求逆,則分子分母同乘$ 1+ \sqrt{1-4c}$得

$ f=\frac{2}{1+\sqrt{1-4C}}$

直接上多項式開根,求逆的板子即可

時間復雜度$ O(n \ log \ n)$


$ my \ code $

這是一份自帶巨大常數的板子

單$ log 10w$需要跑$ 1s+$

#include<ctime> #include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<vector> #define rt register int #define ll long long using namespace std; namespace fast_IO{const int IN_LEN=10000000,OUT_LEN=10000000;char ibuf[IN_LEN],obuf[OUT_LEN],*ih=ibuf+IN_LEN,*oh=obuf,*lastin=ibuf+IN_LEN,*lastout=obuf+OUT_LEN-1;inline char getchar_(){return (ih==lastin)&&(lastin=(ih=ibuf)+fread(ibuf,1,IN_LEN,stdin),ih==lastin)?EOF:*ih++;}inline void putchar_(const char x){if(oh==lastout)fwrite(obuf,1,oh-obuf,stdout),oh=obuf;*oh++=x;}inline void flush(){fwrite(obuf,1,oh-obuf,stdout);} } using namespace fast_IO; //#define getchar() getchar_() //#define putchar(x) putchar_((x)) inline ll read(){ll x=0;char zf=1;char ch=getchar();while(ch!='-'&&!isdigit(ch))ch=getchar();if(ch=='-')zf=-1,ch=getchar();while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*zf; } void write(ll y){if(y<0)putchar('-'),y=-y;if(y>9)write(y/10);putchar(y%10+48);} void writeln(const ll y){write(y);putchar('\n');} int k,m,n,x,y,z,cnt,ans;namespace poly{#define p 998244353vector<int>R;vector<int>get(int n){vector<int>ret(n);for(rt i=0;i<n;i++)ret[i]=read();return ret;}void print(const vector<int>A){for(rt i=0;i<A.size();i++)write((A[i]+p)%p),putchar(' ');}int ksm(int x,int y=p-2){int ans=1;for(rt i=y;i;i>>=1,x=1ll*x*x%p)if(i&1)ans=1ll*ans*x%p;return ans;}void NTT(int n,vector<int>&A,int fla){A.resize(n);for(rt i=0;i<n;i++)if(i>R[i])swap(A[i],A[R[i]]);for(rt i=1;i<n;i<<=1){int w=ksm(3,(p-1)/2/i);for(rt j=0;j<n;j+=i<<1){int K=1;for(rt k=0;k<i;k++,K=1ll*K*w%p){int x=A[j+k],y=1ll*K*A[i+j+k]%p;A[j+k]=(x+y)%p,A[i+j+k]=(x-y)%p;}}}if(fla==-1){reverse(A.begin()+1,A.end());int invn=ksm(n);for(rt i=0;i<n;i++)A[i]=1ll*A[i]*invn%p;}}vector<int>Resize(int n,vector<int>A){A.resize(n);return A;}vector<int>Mul(vector<int>x,vector<int>y){int lim=1,sz=x.size()+y.size()-1;while(lim<=sz)lim<<=1;R.resize(lim);for(rt i=0;i<lim;i++)R[i]=(R[i>>1]>>1)|(i&1)*(lim>>1);NTT(lim,x,1);NTT(lim,y,1);for(rt i=0;i<lim;i++)x[i]=1ll*x[i]*y[i]%p;NTT(lim,x,-1);x.resize(sz);return x;}vector<int>Inv(vector<int>A,int n=-1){if(n==-1)n=A.size();if(n==1)return vector<int>(1,ksm(A[0]));vector<int>b=Inv(A,(n+1)/2);int lim=1;while(lim<=n+n)lim<<=1;R.resize(lim);for(rt i=0;i<lim;i++)R[i]=(R[i>>1]>>1)|(i&1)*(lim>>1);A.resize(n);NTT(lim,A,1);NTT(lim,b,1);for(rt i=0;i<lim;i++)A[i]=1ll*b[i]*(2ll-1ll*A[i]*b[i]%p)%p;NTT(lim,A,-1);A.resize(n);return A;}vector<int>Div(vector<int>A,vector<int>B){int n=A.size(),m=B.size();reverse(A.begin(),A.end());reverse(B.begin(),B.end());A.resize(n-m+1),B.resize(n-m+1);int lim=1;while(lim<=2*(n-m+1))lim<<=1;R.resize(lim);for(rt i=0;i<lim;i++)R[i]=(R[i>>1]>>1)|(i&1)*(lim>>1);vector<int>ans=Resize(n-m+1,Mul(A,Inv(B)));reverse(ans.begin(),ans.end());return ans;}vector<int>Add(vector<int>A,vector<int>B){int len=max(A.size(),B.size());A.resize(len);for(rt i=0;i<len;i++)(A[i]+=B[i])%=p;return A;}vector<int>Sub(vector<int>A,vector<int>B){int len=max(A.size(),B.size());A.resize(len);for(rt i=0;i<len;i++)(A[i]-=B[i])%=p;return A;}vector<int>Mul(int x,vector<int>A){for(rt i=0;i<A.size();i++)A[i]=1ll*A[i]*x%p;return A;}vector<int>deriv(vector<int>A){//求導 for(rt i=1;i<A.size();i++)(A[i-1]=1ll*A[i]*i%p);A.pop_back();return A;}vector<int>integ(vector<int>A){//積分 A.push_back(0);for(rt i=A.size()-2;i>=0;i--)A[i+1]=1ll*A[i]*ksm(i+1)%p;A[0]=0;return A;}vector<int>Ln(const vector<int>A){return integ(Resize(A.size()-1,Mul(deriv(A),Inv(A))));}vector<int>Exp(vector<int>A,int n=-1){if(n==-1)n=A.size();if(n==1)return vector<int>(1,1);vector<int>A0=Resize(n,Exp(A,(n+1)>>1));vector<int>now=Resize(n,Ln(A0));for(rt i=0;i<n;i++)now[i]=(A[i]-now[i])%p;now[0]++;return Resize(n,Mul(A0,now));}struct cp{ll a,b,z;//a+bsqrt(z)cp operator *(const cp s)const{return {(1ll*a*s.a%p+1ll*b*s.b%p*z%p)%p,(1ll*a*s.b%p+1ll*b*s.a)%p,z};}};cp ksm(cp x,int y){cp ans={1,0,x.z};for(rt i=y;i;i>>=1,x=x*x)if(i&1){ans=x*ans;}return ans;}int Sqrt(int n){//求二次剩馀 if(ksm(n,(p-1)/2)!=1)return -1;while(1){x=rand()%p;if(ksm((1ll*x*x%p-n%p+p)%p,(p-1)/2)==1)continue;cp ret=ksm({x,1,(1ll*x*x%p+p-n)%p},(p+1)/2); return min(ret.a,p-ret.a);}}vector<int>GetSqrt(vector<int>A,int n=-1){if(n==-1)n=A.size();if(n==1)return vector<int>(1,Sqrt(A[0]));vector<int>ans=Resize(n,GetSqrt(A,n+1>>1)),C(A.begin(),A.begin()+n);return Resize(n,Mul(ksm(2),Add(ans,Mul(Inv(ans),C))));}vector<int>Pow(vector<int>A,int k){A[0]=1;return Exp(Mul(k,Ln(A)));}//#undef p }; using namespace poly; int inv[100010],v[100010]; int main(){m=read();n=read();vector<int>c(n+1);for(rt i=1;i<=m;i++){x=read();if(x<=n)c[x]++;}vector<int>ans=Mul(-4,c);ans[0]++;ans=GetSqrt(ans);ans[0]++;ans=Mul(2,Inv(ans));for(rt i=1;i<=n;i++)writeln((ans[i]+p)%p);return flush(),0; }

?

?

?

轉載于:https://www.cnblogs.com/DreamlessDreams/p/10177306.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的BZOJ #3625 CF #438E 小朋友和二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区三区18 | 久久久精品福利 | 在线色| 91精品国产欧美一区二区 | 三级理伦 | 成人视屏在线 | 午夜丰满寂寞少妇精品 | 妺妺窝人体色www在线下载 | 丰满肉肉bbwwbbww| 狠狠干一区二区 | 无遮挡毛片 | 特级丰满少妇一级aaaa爱毛片 | 河北彩花中文字幕 | 国产对白羞辱绿帽vk | 久久综合色婷婷 | 精品人妻二区中文字幕 | 中文字幕av影院 | 精品99视频 | 国产精品久久久久久久久免费桃花 | 在哪里可以看黄色片 | 69av视频在线观看 | 少妇av | 制服丝袜在线一区 | 国产精品国产成人国产三级 | 成在线人免费视频 | 国产一区二区久久久 | 国产成人欧美一区二区三区的 | 香蕉久久精品日日躁夜夜躁 | 亚洲老女人视频 | 日韩免费视频一区二区视频在线观看 | 亚洲一区二区天堂 | 四虎永久免费地址 | 国产成人精品久久二区二区91 | 欧美日本成人 | 欧美日韩一区二区在线播放 | av中文在线 | asian性开放少妇pics | 中文字幕在线乱 | 韩日产理伦片在线观看 | 欧美中文字幕视频 | av在线资源 | 日韩福利社 | 国产一区二区在线观看视频 | 亚洲天堂欧美 | 亚洲午夜精品一区二区三区 | 精品国产一区二区三区久久久 | 美女被到爽高潮视频 | 亚洲天堂一区二区三区 | 中出 在线 | 精品无码人妻一区二区三区品 | 51吃瓜网今日 | 久久久久女人精品毛片九一 | 久久久久久久久久久久97 | 九七影院在线观看免费观看电视 | 欧美成人黄色小说 | 国产极品在线播放 | 亚洲色图校园春色 | 波多野结衣视频网站 | 亚洲综合一二三区 | 中文字幕精 | av网页在线观看 | 97se.com| 青青伊人影院 | 上原亚衣在线观看 | 欧洲av一区二区 | 免费的黄色一级片 | 99精品人妻国产毛片 | 西西人体www大胆高清 | 亚洲精品综合在线观看 | 亚洲欧美中文日韩在线 | 午夜xxx| 四虎国产成人精品免费一女五男 | 国产成人精品在线观看 | 色九九视频 | 国产黄色录相 | 成人a√| 中文字幕狠狠 | 97超碰国产精品无码蜜芽 | 京香julia在线观看 | 韩国三级中文字幕 | 一区二区三区免费在线 | 日韩福利片 | 中文字幕精品无码亚 | 天堂在线中文网 | 麻豆成人精品国产免费 | 久久合| 精品处破女学生 | 日本人妻一区 | 国产一级精品视频 | www.色视频| 黄色录像a级片 | 诱人的乳峰奶水hd | 久久看片网 | 国产一区二区波多野结衣 | 欧美二三区 | 美女啪啪无遮挡 | 欧美天堂久久 | 久久久91精品国产一区二区三区 | 91黄在线看|