9.19闲话

今天没太摆!

上午睡觉了。

下午睡觉了。

晚上睡觉了。

充实的一天。

妈的终于把集训时候的饭票给退了,妈的傻逼 wangk 他妈开高团就开高团不问问我们就花我们钱是什么意思啊😅😅😅,自己家里个个有矿是吧😅。你就集训一个月你用你妈的高级团队啊🤣,S2OJ 放这是给你当摆设的?😓😓😓还是说 S2 没搞成 rmj 啊😅,再怎么不济合着你就不能 vjudge 上直接搞个题单😅,合着非就想给洛谷白送那 11 个月的高级团队呢🤣,曺檷嘜傻逼玩意。

我 8 月没要饭票我赢赢赢🤣👉

crimson000:
芙门是信奉芙兰朵露的教吗/se

crimson000:
那石门是不是就是信仰小石头的教了/se

推歌:ヒカリ -めらみぽっぷ


AGC005D

我们先进行一个二项式反演,我们直接钦定有 \(j\) 个位置满足 \(|p_i-i|=k\),我们设放置 \(j\)\(|p_i-i|=k\)\(p_i\) 的方案数为 \(g_j\)。那么最终答案为:

\[ans=\sum_{i=0}^n (-1)^i\times g_i\times (n-i)! \]

现在我们要求的就是 \(g_j\)。我们将图分为左部和右部,其中左部为下标,右部为值,将左部的 \(i\) 和右部的 \(i\pm k\) 连边,最终得到的图一定是一堆链。我们的目标就是选出 \(j\) 条边并且使得两条边没有公共顶点。

我们可以把这堆链先首尾相连方便 dp。我们设 \(f_{i, j, 0/1}\) 为前 \(i\) 条边选了 \(j\) 条,同时第 \(i\) 条边是否选择的方案数,那么我们有转移:

\[f_{i, j, 0}=f_{i-1, j, 0}+f_{i-1, j, 1} \]

而当 \(i\) 是链顶时,它不存在 \(f_{i, j, 1}\)。当 \(i\) 不是链顶时,转移有:

\[f_{i, j, 1}=f_{i-1, j-1, 0} \]

最终 \(g_{i}\) 就为 \(f_{n\times 2, i, 0}+f_{n\times 2, i, 1}\)

另一种求法:

我们对每条链分别处理,\(i\) 个物品中选 \(j\) 个不相邻物品的方案数为 \(\dbinom{i-j+1}{j}\),那么我们把它的 OGF 写出来后,对每条链所对应的 OGF 进行一个卷积即为我们要求的 \(G(x)\)

时间复杂度 \(O(n^2)\)\(O(n\log n)\)

小日子题确实不错/qd


posted @ 2023-09-19 21:12  crimson000  阅读(61)  评论(3编辑  收藏  举报