放球问题即可
考虑现在有
n
n
n 个元素,
x
x
x 种颜色,有
k
k
k 个环,那么
k
k
k 个环的方案数就是
S
1
(
n
,
k
)
S_1(n,k)
S1(n,k)
也可以一个一个元素的放,要么加入之前的位置
i
−
1
i-1
i−1,要么 独自成环
x
x
x
那么就是
x
∗
(
x
+
1
)
∗
(
x
+
2
)
∗
.
.
.
∗
(
x
+
n
−
1
)
x*(x+1)*(x+2)*...*(x+n-1)
x∗(x+1)∗(x+2)∗...∗(x+n−1)
x
n
‾
=
(
−
1
)
n
(
−
x
)
n
x^{\underline n }=(-1)^n(-x)^n
xn=(−1)n(−x)n
x
n
‾
=
(
−
1
)
n
(
−
x
)
n
‾
x^{\overline n }=(-1)^n(-x)^{\underline n}
xn=(−1)n(−x)n
利用这个转化即可
[省选联考 2020 A 卷] 组合数问题
∑
i
=
0
n
x
i
f
(
i
)
(
n
i
)
=
∑
i
=
0
m
a
i
∑
j
=
0
n
j
i
x
j
(
n
j
)
=
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
∑
j
=
0
n
j
k
‾
x
j
(
n
j
)
\sum_{i=0}^nx^if(i)\binom{n}{i}=\sum_{i=0}^ma_i\sum_{j=0}^nj^ix^j\binom{n}{j}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nj^{\underline k}x^j\binom{n}{j}
i=0∑nxif(i)(in)=i=0∑maij=0∑njixj(jn)=i=0∑naik=0∑i{ik}j=0∑njkxj(jn)
考虑右边三个的组合意义,
选
j
j
j 个位置,并给这
j
j
j 个染色(颜色从
1
1
1 到
x
x
x ),再选出
k
k
k 个排队
可以先选出
k
k
k 个排队,再给这
k
k
k 个染色,再从剩下的
n
−
k
n-k
n−k 个选
j
−
k
j-k
j−k 个再染色,于是有
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
∑
j
=
0
n
j
k
‾
x
j
(
n
j
)
=
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
∑
j
=
0
n
n
k
‾
x
k
x
j
−
k
(
n
−
k
j
−
k
)
\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nj^{\underline k}x^j\binom{n}{j}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}\sum_{j=0}^nn^{\underline k}x^kx^{j-k}\binom{n-k}{j-k}
i=0∑naik=0∑i{ik}j=0∑njkxj(jn)=i=0∑naik=0∑i{ik}j=0∑nnkxkxj−k(j−kn−k)
=
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
n
k
‾
x
k
∑
j
=
0
n
x
j
−
k
(
n
−
k
j
−
k
)
=
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
n
k
‾
x
k
∑
j
=
0
n
−
k
x
j
(
n
−
k
j
)
=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k\sum_{j=0}^nx^{j-k}\binom{n-k}{j-k}=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k\sum_{j=0}^{n-k}x^{j}\binom{n-k}{j}
=i=0∑naik=0∑i{ik}nkxkj=0∑nxj−k(j−kn−k)=i=0∑naik=0∑i{ik}nkxkj=0∑n−kxj(jn−k)
=
∑
i
=
0
n
a
i
∑
k
=
0
i
{
i
k
}
n
k
‾
x
k
(
x
+
1
)
n
−
k
=\sum_{i=0}^n a_i\sum_{k=0}^i\begin{Bmatrix}i\\k\end{Bmatrix}n^{\underline k}x^k(x+1)^{n-k}
=i=0∑naik=0∑i{ik}nkxk(x+1)n−k
=
∑
i
=
0
n
a
i
∑
j
=
0
i
{
i
j
}
n
j
‾
x
j
(
x
+
1
)
n
−
j
=\sum_{i=0}^n a_i\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}n^{\underline j}x^j(x+1)^{n-j}
=i=0∑naij=0∑i{ij}njxj(x+1)n−j
然后就能
O
(
k
2
)
O(k^2)
O(k2) 算了
int n,x,m;
int a[MAXN+5];
int S2[MAXN+5][MAXN+5],nd[MAXN+5];
void Init(){
S2[0][0]=1;
for(int i=1;i<=MAXN;i++)
for(int j=1;j<=i;j++)
S2[i][j]=Add(Mul(j,S2[i-1][j]),S2[i-1][j-1]);
return ;
}
int main(){
n=read(),x=read(),Mod=read(),m=read();
Init();
for(int i=0;i<=m;i++)
a[i]=read();
nd[0]=1;
for(int i=1;i<=min(n,m);i++)
nd[i]=Mul(nd[i-1],(n-i+1));
int ans=0;
for(int t=0;t<=m;t++){
int tmp=0;
for(int i=0;i<=min(n,t);i++)
tmp=Add(tmp,Mul(Mul(S2[t][i],nd[i]),Mul(Pow(x+1,n-i),Pow(x,i))));
ans=Add(ans,Mul(a[t],tmp));
}
printf("%d\n",ans);
return 0;
}