zoukankan      html  css  js  c++  java
  • P5437[XR2]约定【拉格朗日差值,数学期望】

    正题

    题目链接:https://www.luogu.com.cn/problem/P5437


    题目大意

    \(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\)。随机选出一个生成树,求期望边权和。

    \(1\leq n<998244353,1\leq k\leq 10^7\)


    解题思路

    一条边选出来的概率是\(\frac{2}{n}\)(总共有\(\frac{2}{n(n-1)}\)条,选\(n-1\)条,或者\(Prufer\)序列也能证明)

    所以现在考虑怎么求

    \[\sum_{i=1}^n\sum_{j=1}^n(i+j)^k \]

    这个东西首先\(f(n)=\sum_{i=1}^n\sum_{j=1}^ni+j\)是一个二项式,所以\((i+j)^k\)就是一个\(k+2\)次多项式,所以可以考虑用拉插。

    现在是如何快速求出\(1\sim k\)的值,考虑递推

    \[f(n)-f(n-1)=\sum_{i=1}^n\sum_{j=1}^n(i+j)^k-\sum_{i=1}^{n-1}\sum_{j=1}^{n-1}(i+j)^k \]

    \[=\sum_{i=n+1}^{2n-1}i^k \]

    然后用线性筛预处理出\(i^k\)就好了。当然拉插也要用线性的优化

    时间复杂度\(O(n)\)


    code

    #include<cstdio> 
    #include<cstring>
    #include<algorithm>
    #define ll long long
    using namespace std;
    const ll N=1e7+10,P=998244353;
    ll n,k,cnt,pri[N/5],w[N<<1],y[N];
    ll pre[N],suf[N],inv[N],ans;
    bool v[N<<1];
    ll power(ll x,ll b){
    	ll ans=1;
    	while(b){
    		if(b&1)ans=ans*x%P;
    		x=x*x%P;b>>=1;
    	}
    	return ans;
    }
    void Prime(int n){
    	w[1]=1;
    	for(ll i=2;i<=n;i++){
    		if(!v[i])pri[++cnt]=i,w[i]=power(i,k);
    		for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){
    			v[i*pri[j]]=1;w[i*pri[j]]=w[i]*w[pri[j]]%P;
    			if(i%pri[j]==0)break;
    		}
    	}
    	return;
    }
    signed main()
    {
    	scanf("%lld%lld",&n,&k);
    	Prime(k*2+6);k+=3;pre[0]=suf[k+1]=inv[1]=1;
    	y[2]=w[3];
    	for(ll i=3;i<=k;i++)
    		y[i]=(y[i-1]+w[i*2-1]+w[i*2-2]-w[i])%P;
    	for(ll i=1;i<=k;i++)y[i]=(y[i-1]+y[i])%P;
    	for(ll i=1;i<=k;i++)pre[i]=pre[i-1]*(n-i)%P;
    	for(ll i=k;i>=1;i--)suf[i]=suf[i+1]*(n-i)%P;
    	for(ll i=2;i<=k;i++)inv[i]=P-inv[P%i]*(P/i)%P;
    	inv[0]=1;
    	for(ll i=1;i<=k;i++)inv[i]=inv[i-1]*inv[i]%P;
    	for(ll i=1;i<=k;i++)
    		(ans+=pre[i-1]*suf[i+1]%P*inv[i-1]%P*inv[k-i]%P*y[i]%P*(((k-i)&1)?-1:1))%=P;
    	printf("%lld\n",(ans+P)%P*power(n,P-2)%P*2%P);
    	return 0;
    }
    
  • 相关阅读:
    python redis
    Celery
    RabbitMQ
    python的文件锁操作
    cloud-init alibaba
    cloud-init tencent
    关于 python 的类
    jnija2模板渲染
    python multiprocessing
    学习html5的WebSocket连接
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/14513720.html
Copyright © 2011-2022 走看看