CF961G Partitions
什么神仙题啊
答案非常显然就是
\[\sum_{i=1}^nw_i\times \sum_{i=1}^ni\binom{n-1}{i-1}S_2(n-i,k-1)
\]
这是因为考虑到每一个\(w_i\)的地位都是对等的,于是每一个\(w_i\)被计算进总答案的系数都是相同的,我们算一下那个系数就好了,显然就是枚举有多少个和当前分到了一组,之后剩下的用第二类斯特林数把剩下的分配到\(k-1\)组里去就好了
之后根据第二类斯特林数的容斥形式,我们能把后面的那个柿子变成
\[\sum_{j=0}^{k-1}\frac{(-1)^j}{j!(k-1-j)!}\sum_{i=1}^n\frac{(n-1)!i}{(n-i)!(i-1)!}(k-1-j)^{n-i}
\]
推不动了告辞
之后就是抄yyb的了
我们着重搞后面那个柿子,也就是
\[\begin{aligned} &\ \ \ \sum_{i=1}^n\frac{(n-1)!i}{(n-i)!(i-1)!}(k-1-j)^{n-i}\\&=\sum_{i=1}^n\frac{(n-1)!(i-1+1)}{(n-i)!(i-1)!}(k-1-j)^{n-i}\\&=\sum_{i=1}^n\frac{(n-1)!}{(n-i)!(i-1)!}(k-1-j)^{n-i}+\sum_{i=1}^n\frac{(n-1)!}{(n-i)!(i-2)!}(k-1-j)^{n-i}\\&=\sum_{i=1}^n\frac{(n-1)!}{(n-i)!(i-1)!}(k-1-j)^{n-i}+(n-1)\sum_{i=1}^n\frac{(n-2)!}{(n-i)!(i-2)!}(k-1-j)^{n-i}\\&=\sum_{i=0}^{n-1}\binom{n-1}{n-i}(k-1-j)^{n-i}1^{i-1}+(n-1)\sum_{i=0}^{n-2}\binom{n-2}{n-i}(k-1-j)^{n-i}1^{i-2}+(n-1)\\&=(k-j)^{n-1}+(n-1)(k-j)^{n-2}\\&=(k-j+n-1)(k-j)^{n-2}\end{aligned}
\]
最后整体的柿子就是
\[\sum_{j=0}^{k-1}\frac{(-1)^j}{j!(k-1-j)!}(k-j+n-1)(k-j)^{n-2}
\]
代码
#include<cstdio>
#define re register
const int maxn=2e5+5;
const int mod=1e9+7;
inline int ksm(int a,int b) {
int S=1;for(;b>0;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;return S;
}
int n,k,ans,sum,fac[maxn],ifac[maxn];
int main() {
scanf("%d%d",&n,&k);
fac[0]=1;ifac[0]=1;
for(re int i=1;i<k;i++) fac[i]=1ll*fac[i-1]*i%mod;
ifac[k-1]=ksm(fac[k-1],mod-2);
for(re int i=k-2;i>=0;--i) ifac[i]=1ll*ifac[i+1]*(i+1)%mod;
for(re int j=0;j<k;j++) {
int now=1ll*ifac[j]*ifac[k-1-j]%mod;
now=1ll*now*(n+k-j-1)%mod*ksm(k-j,n-2)%mod;
ans=(ans+((j&1)?-1:1)*now)%mod;
}
ans=(ans+mod)%mod;
for(re int x,i=0;i<n;i++) scanf("%d",&x),sum=(sum+x)%mod;
printf("%d\n",1ll*sum*ans%mod);
return 0;
}