杂题

题意
给定n,对于k∈[0,n),分别计算对于排列{1,2,⋯,n},进行最多k次操作,每次选择一个数字拿到前面或后面,形成的排列个数
n≤1000

做法
最多进行k次操作等价于排列中最长上升子段长度≥n−k

固定k,下面考虑计算排列中最长上升子段长度≤k的方案数
直接做显然不好做,考虑构造容斥系数
我们想通过egf得到答案,ans=[xn]∑i=1∞(∑j=1nfjxjj!)i
构造满足条件∑i=1∞(∑j=1nfjxj)i=∑i=1kxi
令F(x)=∑i=1nfixi
∑i=1∞F(x)i1+∑i=1∞F(x)i11−F(x)F(x)F(x)=∑i=1kxi=∑i=0kxi=xk+1−1x−1=1−x−1xk+1−1=∑i≥0x(k+1)i+1−∑i≥1x(k+1)i
由于F(x)有效位置并不多,暴力计算即可
O(n2lnn)

posted @ 2020-11-01 10:00  神笔-马良  阅读(69)  评论(0编辑  收藏  举报