luoguP4705 玩游戏
发布日期:2021-10-24 14:20:39 浏览次数:4 分类:技术文章

本文共 1597 字,大约阅读时间需要 5 分钟。

好好玩

即对于k∈[1,t] 求(ax+by)^k

以下图片均来自于:

 

二项式展开:

 设:

那么:

可以卷积了

求:

(PS:随机序列的0~k次方和,这是一个经典问题。)

我的思路:O(nk)暴力

神仙思路:求一个毫不沾边的东西,然后写两次,对应上系数。O(nlog^2n)

 

不妨考虑求A(x):

先求一个看起来毫不沾边的东西:

这个G成为了写两次的东西

解决问题的中轴和杠杆

 

利用

分治NTT+求Ln

现在已经写了一次

 

写第二次:

 

对于单独一项,采用Taylor展开,往多项式方向靠近

合起来:

交换顺序:

哇!

写第二次,

Taylor展开+交换求和号

对应系数直接相等

 

神仙神仙~!~~~!!~!

 

Code

多项式全家桶

const int N=1e5+5;int n,m,K;int a[N],b[N];int A[N],B[N];int c[N];int jie[N],inv[N];il Poly divi(int l,int r){    if(l==r){        Poly g;g.resize(2);g[0]=1;g[1]=c[l];return g;    }    int mid=(l+r)>>1;    Poly L=divi(l,mid),R=divi(mid+1,r);    return L*R;}void wrk(int *a,int *A,int n){        for(reg i=1;i<=n;++i) c[i]=a[i];    Poly G=divi(1,n);    // G.out();    G.resize(K+4);    G=Ln(G);       G.resize(K+1);    // G.out();    for(reg k=1;k<=K;++k){        if((k+1)&1){            A[k]=mod-mul(G[k],k);        }else{            A[k]=mul(G[k],k);        }    }}int main(){    rd(n);rd(m);    for(reg i=1;i<=n;++i){        rd(a[i]);    }    for(reg i=1;i<=m;++i){        rd(b[i]);    }    rd(K);    wrk(a,A,n);    wrk(b,B,m);    A[0]=n;    B[0]=m;    // prt(A,0,K);    // prt(B,0,K);    Poly f,g;    f.resize(K+1);g.resize(K+1);    jie[0]=1;    for(reg i=1;i<=K;++i) jie[i]=(ll)jie[i-1]*i%mod;    inv[K]=qm(jie[K],mod-2);    for(reg i=K-1;i>=0;--i) inv[i]=mul(inv[i+1],i+1);    for(reg i=0;i<=K;++i){        f[i]=mul(A[i],inv[i]);        g[i]=mul(B[i],inv[i]);    }    f=f*g;    for(reg i=1;i<=K;++i){        ll ans=mul(jie[i],f[i]);        ans=mul(ans,qm(mul(n,m),mod-2));        printf("%lld\n",ans);    }    return 0;}

 

转载于:https://www.cnblogs.com/Miracevin/p/10736482.html

转载地址:https://blog.csdn.net/weixin_30791095/article/details/97990519 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:thinkphp整合系列之tcpdf类生成pdf文件
下一篇:8 Principles of Better Unit Testing

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月16日 22时25分17秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章