专栏文章

AT_joisc2018_d 修行 (Asceticism)

AT_joisc2018_d题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miq7ol30
此快照首次捕获于
2025/12/04 00:18
3 个月前
此快照最后确认于
2025/12/04 00:18
3 个月前
查看原文

AT_joisc2018_d 修行

题意

求有多少个长为 NN 排列 PP 满足:
NK=i[Pi<Pi+1]N-K=\sum\limits_i[P_i<P_{i+1}]
1KN1e51\le K\le N\le 1e5

题解

我们可以先求至少有 NjN-j 个位置合法。我们把连续的 [Pi<Pi+1][P_i<P_{i+1}] 这相当于把 NN 个数放进不同的 jj 段里,容斥可得答案为:
i=1j(ji)(1)jiin\sum\limits_{i=1}^j\dbinom{j}{i}(-1)^{j-i}i^n
通过二项式反演求出恰好有 NKN-K 个位置合法的答案:
ANS=j=1K(NjNK)(1)Kji=1j(ji)(1)jiinANS=\sum\limits_{j=1}^{K}\dbinom{N-j}{N-K}(-1)^{K-j}\sum\limits_{i=1}^j\dbinom{j}{i}(-1)^{j-i}i^n
交换求和顺序:
=i=1Kj=iK(NjNK)(ji)(1)Kj(1)jiin=\sum\limits_{i=1}^K\sum\limits_{j=i}^{K}\dbinom{N-j}{N-K}\dbinom{j}{i}(-1)^{K-j}(-1)^{j-i}i^n
=i=1K(1)Kiinj=iK(NjNK)(ji)=\sum\limits_{i=1}^K(-1)^{K-i}i^n\sum\limits_{j=i}^{K}\dbinom{N-j}{N-K}\dbinom{j}{i}
=i=1K(1)Kiin(N+1NK+i+1)=\sum\limits_{i=1}^K(-1)^{K-i}i^n\dbinom{N+1}{N-K+i+1}
其中 i=0N(ia)(Nib)=(N+1a+b+1)\sum\limits_{i=0}^{N}\dbinom{i}{a}\dbinom{N-i}{b}=\dbinom{N+1}{a+b+1} 可以理解为枚举 N+1N+1a+b+1a+b+1 中第 a+1a+1 个数的位置。

代码

CPP
int main(){
	cin>>n>>k;
	fac[0]=1;
	for(int i=1;i<=n+1;i++)fac[i]=fac[i-1]*i%mod;
	for(int i=1;i<=k;i++)ans=(ans+qpow(-1,k-i)*qpow(i,n)%mod*C(n+1,n-k+i+1)%mod+mod)%mod;
	cout<<ans<<"\n";
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...