冬季记录
qoj14025 Bot Friends 2
考虑 \(n\) 个人合并的过程长什么样,因为每个点都有一个人,所以假如在一个点合并时一定是合并到原先在这个点的人上然后再往后合并,所以相当于每个人 \(u\) 找到一个目标点 \(v\) 并花费 \(dis(u,v)+a_v\) 的代价合并。
考虑最后合并到的位置,如果合并的位置不在 \(\min a\) 的位置,那么可以取消 \(a\) 的合并,并把另一个点反方向移动到这个点,所以最后的位置一定在 \(a\)。
那么问题转化为一个完全图,\(u \to v\) 边权为 \(a_v + dis(u,v)\),求一棵最小内向生成树。由于带方向不好处理,且除了根之外每个点恰好有 \(1\) 条出边,所以把边权变为 \(a_u + a_v - dis(u,v)\),求最小生成树后减去除了根以外的 \(a\) 即可。
对 \(u\) 建立虚点 \(u'\),并有边 \((u,u',a_u)\),然后就是所有 \(u'\) 作为关键点,两两边权为原图的 \(dis\) 的完全图。这是一个经典问题,考虑同时把每个关键点往外扩张,每个原图的点记录最近的关键点 \(f_u\),对于原图的边 \((u,v,w)\),若 \(f_u,f_v\) 不同,那么 \((f_u,f_v,w)\) 就有可能在完全图的 mst 上,证明可以考虑 kruskal 的过程。全源最短路实现即可,复杂度 \(O(m\log n)\)。
P5972 [PA 2019] Desant / xsy2351A 概率论(probability)
考虑暴力 dp,设 \(dp_{i,S}\) 为做完前 \(i\) 位选了 \(S\) 的最小逆序对数,是 \(O(n 2^n)\) 的。
考虑优化状态,\(S\) 中若干连续的 \(1\) 显然是不必要的,可以用一个数来代替,那么可以看成 \([i+1,n]\) 中的数开头为一段,一共 \(n-i\) 段,每段记录前面在这段内选的数个数。
那么 \(S\) 的状态数量是多少?设当前有 \(m\) 个段,每个段长度 \(a_i\),保证 \(\sum a_i \le n\),那么状态数就是 \(\prod a_i\),显然在 \(a_i = \dfrac{n}{m}\) 时最大,为 \((\dfrac{n}{m})^m\),当 \(\dfrac{n}{m} = e\) 时该关于 \(m\) 的函数取到最大值,离散情况下可以看作 \(3\)。
所以复杂度为 \(O(3^{\frac{n}{3}} n)\),状态可以使用进制数(\(\prod len_i\))表示,大小就不会超过状态数了,转移用 dfs 实现即可快速得知后面的状态。
xsy2351C 三元环(loop)
考虑从最上面开始往下操作,碰到一个 \(1\) 就将其往下一行操作,这样在操作到无限下面的时候状态跟初始 \((x,y)\) 开始往下操作是一致的。
考虑从 \((x,y)\) 开始操作的形态,若将其设为 \((0,0)\),那么 \((n,m)\) 对应的就是 \(\binom{n}{m} \bmod 2 = [m \subseteq n]\)。所以只需找到 \(V=-10^{18}\) 行的最左和最右边的 \(1\),就可以算出一开始的 \((x,y)\)。
假设我们得知了 \((V,y_0)\) 为 \(1\),由于 \(y_0 - y \subseteq x - V\),所以只需要枚举加上 \(2^k\) 检查是否为 \(1\) 即可。检查一个点的合法性可以直接枚举每个初始点,算每个点对它的贡献,是奇数就为 \(1\)。这部分复杂度 \(O(n \log V)\)。
那么考虑求出任意一个 \(1\),对于一个区间 \([l,r]\),有多少个 \(1\) 是不好算的,但贡献次数是好算的。若 \([l,r]\) 有奇数个贡献,那么肯定存在一个点,此时从 mid 砍开也至少有一边是奇数。那么只要找到一开始的一个这样的区间即可。
考虑将杨辉三角按列模 \(3\) 求和,考虑长什么样,\((1,0,0)\to (1,1,0) \to (1,0,1) \to (0,1,1) \to (1,1,0) \to \ldots\),任意时刻至少有一个为 \(1\)。所以只需求出 \(V\) 行模 \(3\) 的列和即可,然后在奇数的一种中二分。贡献可以数位 dp 算。复杂度 \(O(n\log^2 V)\)。
xsy2354B C(C)
设 \(f_n\) 为 \(n\) 开始的必胜状态,如果 \([n-S(n),n-1]\) 没有 \(0\) 那么 \(f_n = 0\),否则 \(=1\)。
容易发现,相邻两个 \(0\) 距离不超过 \(S(V)\),且判断一个位置是否为 \(0\) 需要知道的信息之和它的 \(S\) 和前面的距离有关。于是考虑数位 dp,设 \(f_{i,j,k}\) 为 \(i\) 位以后都确定了(设其为 \(x\)),和为 \(j\),距离 \(x000\) 为 \(k\),dp 值为距离 \(x999\) 最近的 \(x???\) 的距离。转移可以枚举 \(i\) 的下一位为 \(0 \sim 9\) 依此确定。预处理复杂度 \(O(B^3 \log^3 V)\)。
询问的时候从高位往低枚举,维护与 \(x000\) 的距离 \(cur\),每次枚举 \(x100,x200,\ldots,xc00\),其中 \(c\) 是 \(n\) 这一位的值,递推出来即可。复杂度 \(O(qB\log V)\)。
qoj15876 Asian Soul / THUPC 2026 初赛 A
假设我们知道了 \(a[l,r]\) 的虚树,那么我们只需要把 \(u\) 插入虚树后祖先最大值使得它的其他子树有关键点(\(a_l \sim a_r\))。
考虑用线段树维护区间虚树,把所有询问按 \(u\) 的 dfn 排序后插入到 \(O(\log n)\) 个线段树节点上,然后把儿子的 dfn 归并起来后再和当前节点的询问归并,然后用单调栈求出虚树即可建出虚树。然后在虚树上 dfs 一次,往 \(u\) 子树递归的时候若 \(u\) 子树的关键点不全在 \(v\) 子树时,就把 \(v\) 子树的答案对 \(u\) 取 max。
时间复杂度 \(O((n+q)\log n)\),空间复杂度 \(O(n+q\log n)\)。
qoj15877 回响形态 / THUPC 2026 初赛 B
- 做法一
考虑对一个中心求答案,首先将极长的中心为 \(k\) 的串取出来。对于一个 border \(a[i,j],a[p,q]\),利用其和中心距离相等的性质,将这个串翻转之后,将 \(s'_i\) 插入 \(s_i,s_{i+1}\) 中间,那么这个 border 就会形成一个偶回文串。
例如 abcdab,插入之后为 abbacddcabba,其中 abba 是一个合法的子串,对于原 border ab,并且不能算跨过新串 \(\dfrac{len}{2}\) 的位置,因为插入后中间天然形成一个回文,只能算完全在左侧的即可。
manacher 即可解决此问题,复杂度 \(O(nq)\)。
- 做法二
考虑当前已经知道 \(len+2\) 的所有 border,求 \(len\) 的 border,假设有一个 aSb,那么原串长 aSbTaSb,左右删除一个位置后肯定存在 S 这个 border。
换句话说,所有 \(len+2\) 的长度 \(>2\) 的 border 都在 \(len\) 中存在。那么考虑从小往大推,往外扩展一位的时候只需要把原有的 border 不合法的去掉,然后新加长度为 \(1\) 或 \(2\) 的 border。
进一步地,一个长度 \(\le 2\) 的 border \(a[i,j], a[p,q]\),对答案的贡献就是 \(\min(lcs(i-1,p-1), lcp(j+1,q+1)) + 1\)。
SA 预处理可做到 \(O(n\log n + nq)\)。
qoj15879 Unpair Ampere / THUPC 2026 初赛 D
首先肯定得是流子。
- 建模一
分组问题,对每个 \(0\) 连到 \(s\) 容量为 \(a_i\),连到 \(t\) 容量为 \(0\),\(1\) 同理。然后每个 \(0\) 连到原 dag 的正图上,对于每个点 \(i\),将其正图上的点连到反图上容量为 \(a_i\),反图再连到 \(1\) 的点。
直接跑最小割会有问题,可能一个点两边都被割掉,这时候只需要把边权加上 inf 即可。
- 建模二
考虑转为正的贡献,一个 \(0\) 的点选到 \(s\) 有 \(a_i\) 贡献,否则为 \(0\),一个点 \(i\) 若其所有祖先在同一组也有贡献,那么可以先减去 \(2a_i\) 然后跑经典相同分组正贡献的割子即可。
qoj15886 集合 / THUPC 2026 初赛 K
考虑若 \(a,b\) 无交,那么直接贪心,每次跳到最远能跳到的点即可。
\(a,b\) 有交时,可以 dp 每个有交的位置,中间贪心跳。但是这时有 \(O(n)\) 个点,每个点会跳 \(O(n)\) 次,不能接受。
设三元组 \((x,y,v)\) 表示 \(a,b\) 跳到 \((x,y)\) 答案为 \(v\)。考虑对于所有相同 \(x\),在一个合法的时刻所有 \(y\) 的极差是 \(\le limb\) 的,那么最小的 \(y\) 的 \(v+1\) 即可超过最大的 \(y\),所以有用的 \((y,v)\) 只有不超过两种。
有了这个性质,每次跳一个区间的时候,优先将小的 \(x\) 往后跳,和 \(nxt_x\) 合并(因为先跳大的可能会无法合并,导致复杂度退化)。此时每个点只会被更新最多 \(3\) 次,或者把一个三元组删掉。
拿个 set 同时维护 \(x\) 对应的 \((y,v)\) 和 \(y\) 对应的 \((x,v)\),即可做到 \(O(n\log n)\)。
换成链表可能可以做到 \(O(n)\),没细想。
P10627 [JOI Open 2024] 中暑 / Heat Stroke
假设最后的局面中 \([l,r]\) 区间都被取满了,\(l-1,r+1\) 都没满,这个区间的贡献就是 \(l-1\) 占 \(l\) 的个数加 \(r\) 占 \(r\) 个数,再加上中间道路的和减去总位置数量,即 \(R_{l-1}+\sum\limits_{i=l}^{r-1} a_i + L_{r} - \sum\limits_{i=l}^r c_i\)。
考虑钦定若干个这样的区间,这样最优的答案肯定能被算到,区间内部的贡献是确定的,我们只需要最大化 \(R_{l-1}+L_r\)。
假设当前确定了区间 \([l,r]\),枚举 \(R_{l-1}\),然后考虑贪心。由于我们想让 \(R_{l-1}\) 个贡献到 \(l\) 时没被占满,那么肯定是最早的那些。所以这个对 \(a_l\) 的限制是在 \(a_{l-1}\) 的第 \(R_{l-1}\) 对应时间 \(t_{l-1}\) 前往左贡献的不超过 \(c_l - R_{l-1}\),即 \(t_{l-1}\) 时间前至少有一些数是往右贡献的,同理这些数肯定也是最早的那些,否则调整过来是不劣的,那么也对应了一个 \(t_l\) 的一个子问题。对于剩下的东西,直接按时间顺序模拟,最后放不下了的也只能往右放。
所以可以把问题看成 \((i,l,r)\) 表示保证 \(a_i\) 的前 \(l\) 个必须往右贡献,后 \(r\) 个有可能往右贡献,显然状态数是 \(\sum {a_i}^2\) 的,直接 dp 或搜索都可以通过。
时间复杂度 \(O(n^2)\),空间复杂度写搜子即可做到 \(O(n)\)。
xsy2359A 方格染色(matrix)
先将 \(\text{popcount}(x \& a_i) \equiv 1 \pmod{2}\) 转化为 \(\dfrac{1-(-1)^{\text{popcount}(x \& a_i)}}{2}\),条件可以转化为 \(\sum\limits_x 3^x\prod\limits_i \dfrac{1-(-1)^{\text{popcount}(x \& a_i)}}{2}\)。
先枚举乘积里哪些取了 \(-1\) 哪些取了 \(1\),然后因为 \((-1)^{\text{popcount}(x \& a_i)} \cdot (-1)^{\text{popcount}(x \& a_j)} =(-1)^{\text{popcount}(x \& (a_i \oplus a_j))}\),所以只需要算 \(\sum\limits_x (-1)^{\text{popcount}(x \& t)} \cdot 3^x\),直接 dp 计算是 \(O(k)\) 的,无法通过。考虑每 \(20\) 位预处理每个 \(t\) 的答案,再乘起来即可。
复杂度 \(O(2^{\frac{k}{3}} \cdot k + n2^m)\)。
P11666 [JOI 2025 Final] 邮局 / Post Office
先考虑一棵树的情况。
考虑一个朴素暴力,每个时刻都让每个点上所有包裹中距离终点最远的那个往上跳,因为如果跳的不是最远的话,交换一下这两条路径肯定不劣。但是这样很难对每个点算它的答案,因为会受到子树内往上的影响之类的。
转换一下思路,对每条边求跨过这条边的所有包裹中最晚走过的时刻 \(t_i\),答案就是 \(\max t_i\)。假设当前这条边被 \(k\) 个 \(a_i \to b_i\) 路径覆盖,且 \(a_i\) 到它的距离为 \(d_i\)。考虑钦定一个到达的顺序,设 \(f_i\) 为第 \(i\) 个点跨过它的时间,那么 \(f_i\) 显然有 \(f_i \ge \max(f_{i-1},d_i)+1\)。可以证明一定可以取到等号,因为如果相撞了的话后面的跨越的时间就连续了,那么将 \(d_i\) 从小到大排序,\(t_i=f_k\) 就能取到最小值,为 \(\max\limits_i d_i + (k-i+1)\)。
但是还有一个问题,在子树内会存在一些其他的子树内到子树内的那些路径,这些东西有可能会对当前的这些路径造成影响吗?实际上是没有影响的,因为考虑有影响的时候肯定是两个东西相撞,这时候考虑上面那个朴素暴力,显然终点不在子树内的那个距离更远,优先级更高。那么线段树合并即可 \(O(n\log n)\) 维护这个东西。
再考虑基环树的情况,先断环为链,把整个树复制一边,再把首尾相接。对于那些跨过环边的路径,保留第一个树上 \(u \to rt\) 和第二个树的 \(u' \to v\) 两条路径即可。注意 \(u \to rt\) 应当是必要的,否则会有 \(u' \to v\) 的覆盖的第一棵树的一个树边少算贡献。
复杂度 \(O(n\log n)\)。
P6782 [Ynoi2008] rplexq
考虑对度数根号分治。
-
对于 \(d_u \le B\),只需要对每个询问暴力枚举每个子树询问子树内 \([l,r]\) 中的数个数,用 \(O(\sqrt{n})-O(1)\) 的分块即可维护,复杂度为 \(O(n\sqrt{n} + qB)\)。
-
对于 \(d_u > B\),对 siz 前 \(B\) 大的子树做 \(d_u \le B\) 的做法,对于其他子树的点,拿出来排序后并标记是哪个子树的,然后做莫队即可,复杂度为 \(O(n\log_B{n}\sqrt{q})\)。
取 \(B = \sqrt{n}\),总复杂度即为 \(O((n+q)\sqrt{n} + n\sqrt{q})\)。
P9058 [Ynoi2004] rpmtdq
最近点对可以考虑支配对的讨论,有用的点对不会很多。
考虑先点分治,对每个点求出其到分治中心的距离 \(a_i\),那么 \(dis(i,j)=a_i + a_j\)。考虑一个 \((i,j)\) 有用必要条件,即 \(\forall i<k<j, \min(dis(i,k),dis(k,j)) > dis(i,j)\),即 \(a_i,a_j < a_k\),那么从小到大加点,只需要考虑每个点的左右第一个比它小的位置就行。单调栈即可以处理出这些点对,总个数是 \(O(n\log n)\) 级别的。
然后直接扫描线树状数组维护即可,复杂度 \(O(n\log^2 n + q\log n)\)。
P11986 [JOIST 2025] 救护车 / Ambulance
考虑只有左上和右下的情况,那么由于对于一个点它到左上和右下的距离和是定值 \(2L-2\),所以把所有点按到左上的距离排序,去左上的肯定是一个前缀,否则调整一下肯定更优。右上和左下的情况也同理。
那么我们处理两个序列,它们分别是所有点到左上距离排序和右下距离排序的结果,然后枚举两个序列的分界点。这时候每个点就会有且仅有两个可能的去处,我们可以对每对去处做一个 \(dp_i\) 表示第一个去处的点距离总和 \(\le i\) 时去第二个点的距离总和最小是多少。然后就可以枚举 \(1\) 的时间,然后推出 \(2,3,4\),最后再检查一下 \(1\) 是否合法。
枚举第一个序列的分界点时,对第二个序列的前缀和后缀处理 dp 值,就可以做到 \(O(n^2 L)\)。
P11983 [JOIST 2025] 展览会 3 / Exhibition 3
首先考虑一个判定:一个线段集合的最小点覆盖,可以对右端点从小到大排序后每次不合法时就选当前线段的右端点即可。
然后考虑求答案,直接枚举答案序列的一个前缀判定是不好做的,考虑可以从大到小枚举每个颜色看他们最优的覆盖(从前往后能选就选)。设这个颜色出现次数为 \(k\)。
把选出的点分成两个部分,当前前缀最小覆盖 \(<k\) 的和 \(=k\)。
-
对于 \(<k\) 的部分,这显然是一个前缀,可以考虑二分答案,每次 \(O(mid \log mid)\) 判断,但是这样会使一个失败的点被判断很多次,退化到 \(O(n^2 \log n)\)。可以把二分答案换成倍增,先正着倍增找到最大的 \(2^i\) 使得它是合法的,然后在 \([2^i,2^{i+1}-1]\) 里面二分或倒着倍增即可,这样单次就是 \(O(ans \log ans)\) 的,总复杂度是 \(O(n\log^2 n)\),提前排序可以做到 \(O(n\log n)\)。
-
对于 \(=k\) 的部分,考虑每个覆盖点的取值范围。先对线段按右端点从小到大排序贪心选右端点,可以得到第 \(i\) 个覆盖点最右的上界取值 \(r_i\),然后再按左端点从大到小每次选左端点,得到第 \(k-i+1\) 个点的下界取值 \(l_{k-i+1}\)。那么就得到了 \(k\) 个区间 \([l_i,r_i]\),并且可以证明 \(r_i < l_{i+1}\),即它们是单增不交的。然后考虑加入一个新的一个线段对这些区间的影响。
- 如果 \([L,R]\) 和所有的 \([l_i,r_i]\) 交为空,那么显然不可能加入。
- 如果 \([L,R]\) 完整包含了一个 \([l_i,r_i]\),那么无论怎么选显然都合法,肯定可以加入且对这些区间没影响。
- 否则只有可能与两个区间相交,若只和一个区间相交,可以考虑还原贪心的过程可以得到影响就是把这个区间和它取交。
- 若和两个区间相交,此时在贪心的过程中从左到右或者从右往左都是没影响的,但是在后面缩小这些区间时它有可能会只和一个相交了,所以要打上一个标记,形如若 \(r_i < L, checkmin(r_{i+1},R)\)。
剩下的问题是如何找到这些能加入的线段,显然这些线段都是和区间有交的,那么对每个区间找到后面编号最小的有交线段,用一个堆从小到大按上面的讨论进行模拟即可,区间可以直接维护,标记可以对每个区间开个堆维护,每次更新的时候 check 一下就行。注意若找到了一个线段完整包含一个区间就直接将其变成合法,不能丢到堆里,否则会被更新 \(O(n)\) 次,导致复杂度退化。用线段树即可维护有交线段查询。
复杂度 \(O(n\log n)\)。
AGC076B Split and Reverse
考虑可以构造出什么操作,对于 \(len = 2\),可以交换 \((0,1),(1,0)\)。进一步地,可以交换类似 \((0,0,0,0,1),(1,0,0,0,0)\) 的,相当于是把两个 \(1\) 同时往不同方向推,且不碰到其他 \(1\)。
所以可以考虑依次将两个序列的 \(1\) 拿出来,将 \(a\) 中第 \(i\) 个 \(1\) 推到 \(b\) 中第 \(i\) 个 \(1\)。那么可以把 \(1\) 分成需要往左推的和需要往右推的,如果两个距离和是相同的话就可以直接构造。
构造方法是把往右的从后往前取出,往左的从前往后取出,依次满足这些,这样就肯定不会在操作过程中碰到其他的了,这样需要的操作次数至多 \(cnt\) 次,所以取 \(0,1\) 中少的那个就可以满足条件。
接下来我们说明距离和不同的肯定无解,由于操作的两个区间满足 \(0,1\) 个数分别相同,交换后内部顺序不变,所以交换后它们的逆序对肯定不变,这显然是一个必要条件。当距离和不同时,我们先把少的那个全推到对应位置,剩下的 \(a\) 中 \(1\) 肯定都在 \(b\) 中 \(1\) 的左侧或右侧,显然逆序对个数不等,无解。
复杂度 \(O(n)\)。
CF2178 G. deCH OR Dations
假设先把圆上的弦按相交连边,编号小的连到大的,形成一个 dag。合法条件就是每个点的以它结尾的路径和开头的路径个数中存在偶数。
以它结尾的路径个数是好处理的,只需要加入时把前驱异或一下即可,关键是要维护以它开头的路径个数。
考虑设 \(S_u\) 表示 \(u\) 点对哪些前面的点的奇偶性有影响,显然 \(u \in S_u\),\(S_u\) 也可以类似上面转移,直接把前驱异或起来就行。
这个可以用 xorhash 维护,处理前驱用 bit 维护区间异或和即可。
复杂度 \(O(n\log n)\)。
xsy2365C 绝世丑角 / qoj1642 圆环之理
给定一个群 \(U\) 由两类操作 \(\{r^d, sr^t\}\) 组成,其中 \(r\) 代表移位,\(s\) 代表反转,\(r^d\) 即 \(x \to x + d\),\(sr^t\) 代表 \(x \to t - x\)。定义元素集合 \(X\) 为每种点边染色的方案,求稳定子为 \(r^0\) 的元素个数。
设 \(H(d)\) 为稳定子恰好为子群 \(\{r^{\frac{n}{d}}\}\) 的元素数量,即周期恰好为 \(\frac{n}{d}\),\(H_t(d)\) 为稳定子恰好为子群 \(\{r^{\frac{n}{d}},sr^t\}\) 的元素数量,也就是加上一条对称轴。
考虑再设 \(F(d)\) 和 \(F_t(d)\) 分别表示钦定的元素数量,那么有 \(F_t(d) = \sum\limits_{d|k|n} H_t(d)\),因为会算到循环节为其因子的数量。莫比乌斯反演可得 \(H_t(d)=\sum\limits_{d|k|n} F_t(k) \mu(\dfrac{k}{d})\)。
答案就为 \(G(1) = H(1) - \sum\limits_t H_t(1)\)。
考虑怎么求 \(F\) 和 \(F_t\)。
- 对于 \(F(d)\),考虑其划分为 \(g=\dfrac{n}{d}\) 个环,分别求点和边的轨道数量。
- 对于点,每个环就是一个轨道,所以总共有 \(g\) 个环,方案数为 \(a^g\)。
- 对于边,可分成端点在同一个环的和不同环的。
- 在同一个环时,其在环上位置是 \((i,j)\),位移只会导致 \((i,j)\to (i+1,j+1)\),所以只和环上距离有关,轨道数为 \(\lfloor\dfrac{d}{2}\rfloor\)。
- 在不同两个环时,只和它们的错位距离相关,例如 \(n=8,d=4\),环为 \((0,2,4,6),(1,3,5,7)\),其中边 \((0,1)-(2,3)-(4,5)-(6,7)\) 为一个轨道,\((0,3)-\cdots\) 同理,所以有 \(d\) 个轨道。
- 所以总方案数为 \(a^g \cdot b^{g\cdot \lfloor\frac{d}{2}\rfloor + \binom{g}{2} \cdot d}\)。
- 对于 \(F_t(d)\),需要讨论 \(t\) 的作用下 \(t-x\) 和 \(x\) 是否在同一个环里,设在同一个环里的为不动块,其他的环两两匹配。
- 设 \(f_t\) 为在同一个环里的环数量,那么点的轨道数就为 \(B=\dfrac{g+f_t}{2}\)。把环编号为 \(0\sim g-1\),\(f_t\) 为 \(i\equiv t - i \pmod{g}\) 的 \(i\) 数量。
- 若 \(2\nmid g\),解唯一,\(f_t = 1\)。
- 若 \(2 | g\),若 \(2\nmid t\) 则无解,\(f_t=0\),否则 \(f_t = 2\)。
- 把边分成在同个块和不同块直接
- 同个块由于在两两匹配的环上只算一个,所以还是只有 \(B\) 个轨道,个数是 \(\lfloor\dfrac{d}{2}\rfloor \cdot B\)。
- 在两个不动块的和上面类似,新加 \((i,j)\) 和 \((t-i,t-j)\) 的连接,本来每个 \(i-j\) 为一类,现在 \(i-j\) 和 \(j-i\) 也合并,也就是 \((i,d-i)\) 在模 \(d\) 意义下相同,不同的个数就是 \(\lfloor\dfrac{d}{2}\rfloor + 1\),再乘上 \(\binom{f_t}{2}\)。
- 两两动块对之间 \((A,A'),(B,B')\) 中由于存在等价关系,\(4\) 种变成两种关系,每种和上面方案数相同,为 \(d\)。相同动块内部两个也有 \(1\) 个贡献,不动块和动块之间也是同理。总共 \(d\cdot ((B-f_t)^2 + f_t \cdot (B-f_t))\) 个。
- 总方案数为 \(a^{B}\cdot b^{\lfloor\frac{d}{2}\rfloor \cdot B + d\cdot ((B-f_t)^2 + f_t \cdot (B-f_t))+(\lfloor\frac{d}{2}\rfloor + 1)\cdot \binom{f_t}{2}}\)
- 设 \(f_t\) 为在同一个环里的环数量,那么点的轨道数就为 \(B=\dfrac{g+f_t}{2}\)。把环编号为 \(0\sim g-1\),\(f_t\) 为 \(i\equiv t - i \pmod{g}\) 的 \(i\) 数量。

浙公网安备 33010602011771号