CF997C Sky Full of Stars

Solution

(G(x,y)) 表示恰好(x)(y) 列的颜色相等的方案数,那么答案就可以表示为 (3^{n^2}-G(0,0))

(F(x,y)) 表示选 (x)(y) 列为同种颜色,剩下的可以随便选的可重方案数。

尝试用 (G) 表示 (F),容易知道在 (F(x,y)) 中,(G(i,j)) 的每个方案,都被重复计数了 (inom{i}{x}inom{j}{y}) 次。

[F(x,y)=sum_{i=x}^nsum_{j=y}^n inom{i}{x}inom{j}{y}G(i,j) ]

那么根据二项式反演,有

[G(x,y)=sum_{i=x}^nsum_{j=y}^n (-1)^{i-x+j-y} inom{i}{x}inom{j}{y} F(i,j) ]

代入 (x=0,y=0) ,答案就是

[3^{n^2}-sum_{i=0}^nsum_{j=0}^n (-1)^{i+j}F(i,j) ]

那么只需要将 (F) 求出即可,根据 (F) 的定义容易知道

[F(i,j)=egin{cases} inom{n}{i}inom{n}{j} imes 3 imes 3^{(n-i)(n-j)} , & ij eq 0\ inom{n}{i} imes 3^i imes 3^{n(n-i)}, & ij=0 mbox{and} i eq 0\ inom{n}{j} imes 3^j imes 3^{n(n-j)}, & ij=0 mbox{and} j eq 0\ 3^{n^2} , & i+j=0 end{cases}]

分情况求出 (G(0,0)),即按 (F) 的取值分类,易得

[G(0,0)=sum_{i=1}^nsum_{j=1}^n (-1)^{i+j}F(i,j)+2sum_{i=1}^n (-1)^i F(i,0)+F(0,0) ]

第一项

[sum_{i=1}^nsum_{j=1}^n (-1)^{i+j} inom{n}{i}inom{n}{j} imes 3 imes 3^{(n-i)(n-j)}=3sum_{i=1}^n (-1)^iinom{n}{i}sum_{j=1}^n inom{n}{j}(-1)^j imes (3^{n-i})^{n-j}=(*) ]

对后面的式子用二项式定理,注意下指标从 (1)开始,故还要减去第 (0) 项的值 ((3^{n-i})^n),得

[(*)=3sum_{i=1}^n (-1)^i inom{n}{i}[(3^{n-i}-1)^n-3^{n(n-i)}] ]

可以 (O(nlog n)) 直接求了。对于第二项只有单重求和,不用化简,(O(nlog n)) 直接求。

#include<stdio.h>
#define N 1000007
#define ll long long
#define Mod 998244353

ll fac[N],inv[N];

ll qpow(ll x,ll y){
    x=(x%Mod+Mod)%Mod;
    ll ret=1,cnt=0;
    while(y>=(1LL<<cnt)){
        if(y&(1LL<<cnt)) ret=(ret*x)%Mod;
        x=(x*x)%Mod,cnt++;
    }
    return ret;
}

ll C(ll x,ll y){
    if(x<y) return 0;
    return fac[x]*inv[y]%Mod*inv[x-y]%Mod;
}

ll n;
int main(){
    fac[0]=1;
    for(int i=1;i<N;i++) fac[i]=fac[i-1]*i%Mod;
    inv[N-1]=qpow(fac[N-1],Mod-2);
    for(int i=N-2;~i;i--) inv[i]=inv[i+1]*(i+1)%Mod;
    ll ans=0; scanf("%lld",&n);
    for(int i=1,op=-1;i<=n;i++,op=-op)
        ans=(ans+3*op*C(n,i)*((qpow(qpow(3LL,n-i)-1,n)-qpow(3LL,n*(n-i)%(Mod-1))+Mod)%Mod)%Mod)%Mod;
    for(int i=1,op=-1;i<=n;i++,op=-op)
        ans=(ans+2*op*C(n,i)*qpow(3LL,i)%Mod*qpow(3LL,n*(n-i)%(Mod-1))%Mod+Mod)%Mod;
    printf("%lld",ans);
}
原文地址:https://www.cnblogs.com/wwlwQWQ/p/14254190.html