window.cnblogsConfig = { homeTopImg: [ "https://cdn.luogu.com.cn/upload/image_hosting/clcd8ydf.png", "https://cdn.luogu.com.cn/upload/image_hosting/clcd8ydf.png" ], }

Dmy2026 广附 寒

P12598 参数要吉祥

很显然需要用到莫队。然后考虑对出现次数进行根号分治。当次数小的情况,直接在莫队结束后,扫一遍所有小的次数。当次数大的情况,这时候种类就会少,直接预处理记录会有哪些种类,莫队结束后对每一个种类算贡献。由于是答案最大值。所以直接全部取 MAX 即可。注意:莫队的下标移动最好是先扩张在缩小。

P9525 [JOIST 2022] 团队竞技 / Team Contest

首先用优先队列把三种属性按照大到小排序。考虑如果当前最大的三个海狸互不相同,则这是合法的,输出。如果有其中一个海狸他在 X 里面排最大,但是他的 Y 属性与 Y 最大的海狸是相同的,那么这个海狸肯定是不合法的,标记然后删掉即可。

Day 2模拟赛T1 摊位选取

发现要求的条件有:然后子序列必须空一个,并且是否能够促销,长度大于等于 \(2\)。所以记录状态 \(dp_{i,0/1,0/1,0/1/2}\) 即可,对应直接转移。

P14577 磁极变换

发现对于一个种类,如果在区间内出现偶数个,那么他们会全部互相碰撞掉。如果是奇数个,只会存留最后一个磁铁。所以可以先预处理出前缀和,然后对于每一个询问,直接 \(O(v^2)\) 来判断会不会被另一个磁铁包含,然后被碰掉。

P14328 [JOI2022 预选赛 R2] 糖 2 / Candies 2

发现 \(n \le 3000\) 所以考虑 \(n^2\)。由于只需要考虑最后两个数,所以 \(f_{i,j}\) 记录选的最后两个数是 \(i\)\(j\)。转移需要用到前缀和,所以记录 \(g_{i,j} = \sum\limits_{k=1}^j f_{i,k}\),然后随便转移即可。

P14459 [ICPC 2025 Xi'an R] Mystique as Iris

有个显然的是若最后剩两个数 \(1\) 和一个 \(x \ne 1\)。那么不合法(不神秘)。考虑哪几种方式会使得序列变得合法(神秘)。

  • 若有一个数 \(2\le a_i \le n-1\) 那么肯定可以通过消耗 \(a_i\) 来消去其相邻的。或者是其他的互相消除掉,再被他消除。

  • 若出现两个相邻都为 \(1\) 那么他是总有办法可以消除所有的。左边的 \(1\) 可以把左边消掉,右边 \(1\) 可以把右边消掉。

那么考虑构造一个不合法序列,然后用总方案数减掉它。不合法的条件就是:

  • \(a_i \ne a_{i+1} \ne 1\)

  • \(a_i = 1\) 或者 \(a_i \ge n\)

也就是说要统计 \(\ge n\) 或者 \(1\) 的数量,然后 \(1\) 选的时候不能相同
那么设 \(f_{i,0/1}\) 去转移即可。

P12678 Brooklyn Round 1 & NNOI Round 1 B - Gift

发现 \(b_i\) 呈指数级上升,所以有用的数只有 \(\log V\) 级别。可以先算出 \(\sum a_i\) 然后 \(<b_i\) 的没有贡献,然后 \(\ge b_i\) 的产生 \(a_i \times (b_i-1)\) 的贡献。然后设 \(f_i\) 为目前 \(\sum b = i\) 时的答案,我们直接暴力枚举所有小于 \(i\) 的状态。因为 \(\sum b = 5 \times 10^6\) 所以均摊是 \(O(V)\)

CF1741G Kirill and Company

一道无脑细节题。首先是发现可以网络流。基于原图构造网络流图。考虑对于每一个点上算费用所以拆点处理,点自己的边给一个费用 \(-1\)。然后对于每一个有车的人,应是从源点走到 \(1\) 在经过他的最短路,最后到达他的家,然后连向汇点,那么他怎样才会流最短路?先预处理出 BFS,如果一条边 \((u,v)\)\(dis_u + 1 = dis_v\) 那么他必然在某条路径最短路上,否则它必然不在。所以只需要对这些边放进网络中即可。

P6047 丝之割

首先是先将所有的弦 \((u,v)\) 按照 \(u\) 递增排序。考虑转换成 \(u\) 递增的同时 \(v\) 也是递增。观察到性质,从左往右切割,所以若对于有两个二元组 \((x_1,y_1)\)\((x_2,y_2)\)\(x_1 < x_2\)\(y_1 > y_2\),那么对于任意二元组 \((x_3,y_3)\) 能够切割 \((x_1,y_1)\)。则 \(x_3 < x_1\)\(y_3 > y_1\),那么 \(x_3 < x_2\)\(y_3 > y_2\),所以 \((x_3,y_3)\) 能切 \((x_2,y_2)\)。于是当 \((x_1,y_1)\) 可以被切时,那么 \((x_2,y_2)\) 必定被切。所以将 \((x_2,y_2)\) 删除。则可以保证对于任意 \(i\) 都有 \(u_{i+1} > u_i\)\(v_{i+1} > v_i\)。即构造出 \(u\) 递增的同时 \(v\) 也是递增。

考虑 Dp。设 \(f_i\) 表示剪了前 \(i\) 条弦所消耗的最小代价。那么转移从 \(f_j\)\(f_i\),由于已经是排好序的,所以 \(a_i\) 的取值是一个前缀,\(b_i\) 的取值是一个后缀。于是得到转移方程:

\[f_i = \min\limits_{j=1}^{i-1} f_j + (\min\limits_{x=1}^{v_{j+1} - 1} a_x) \times (\min\limits_{x=v_i+1}^n b_x) \]

发现转移方程由四个元素组成,其中求 \(f_i\) 且已知 \(\min\limits_{x=v_i+1}^n b_x\),并且从 \(j\) 转移过来有关的是 \(f_j\)\(\min\limits_{x=1}^{v_{j+1} - 1} a_x\)。考虑转换成斜率优化 Dp 的模板:对于 \(y=kx+b\),有 \(b=y-kx\),看作 \(b=y+k(-x)\)。套路地,求的 \(f_i\)\(b\) 即一次函数与 Y 轴相切的纵坐标。已知的 \(\min\limits_{x=v_i+1}^n b_x\) 是斜率 \(k\)。转移来的 \(j\) 有关的是坐标 \((f_j,-\min\limits_{x=1}^{u_{j+1} - 1} a_x)\)。又由于 \(k\) 随着 \(i\) 递增而单调不递减。则可以单调队列维护凸包。

CF1768F Wonderful Jump

神仙题。考虑最简单的转移方式:

\[f_i = \min\limits_{j=1}^{i-1} f_j + \min_{k=j}^i a_k \times (i-j)^2 \]

考虑如果 \(j\)\(i\) 直接跳最优会怎样。那么如果最劣的情况是一个一个跳,即 \((i-j) \times n\),因为 \(a_i \le n\) 所以 \(a_i\) 最多都是 \(n\)。那么有不等式:

\[\min_{k=j}^i a_k \times (i-j)^2 \le n \times (i-j) \]

\[\therefore \min_{k=j}^i a_k \times (i-j) \le n \]

看到区间 \([i,j]\) 有关的两个数之和小于等于 \(n\)。于是直接考虑根号分治。

但是先引入另一个性质:当 \(i\)\(j\) 是最优,所以不存在 \(i < k < j\) 使得 \(a_k = \min\limits_{x=i}^j a_x\)。也就是最小值一定在 \(i\) 上或者是 \(j\) 上。证:

利用反证法,如果说上述性质不成立,则存在一个 \(k\) 的贡献为 \(a_k \times ((i-k)^2 + (k-j)^2)\)。而不存在 \(k\) 直接转移的是 \(a_k \times (i-j)^2\)。显然,会有 \((i-k)^2 + (k-j)^2 \ge (i-j)^2\)。所以与原性质违背。证毕。

实现:

利用根号分治。

  • 对于 \((i-j) \le \sqrt{n}\) 的,他们的 $ \min_{k=j}^i a_k \ge \sqrt{n}$ 可以直接枚举 \(j\) 转移。

  • 对于 \((i-j) \ge \sqrt{n}\) 的,他们的 $ \min_{k=j}^i a_k \le \sqrt{n}$。所以当 \(k = j\) 时可以通过维护只有 \(\sqrt{n}\) 个的 \(a_k\) 值且距离目前 \(i\) 最近的。然后逐个转移。于是也是 \(O(n \sqrt{n})\)。如果 \(i=k\) 的时候直接暴力往前面找第一个小于它的即可。这个均摊是 \(O(n)\) 的。

CF1710B Rain

先预处理出来所有的区间都覆盖的所有点的值。这个是好做的,跑两次前缀和即可,在 \(x-p\) 标一个 \(+1\)\(x+1\) 标一个 \(-2\),在 \(x+p\) 标一个 \(+1\) 即可。然后考虑对于每一个删掉的区间。肯定是这样的 \(\{1,2,\cdots,i,i-1,\cdots,2,1\}\) 这样的,所以考虑将他分成递增和递减的两端,即 \(\{1,2,3,\cdots,i\}\),那么这样的话可以先预处理出来每一个值 \(a_i + i\),用个 ST 表或者线段树维护 MAX,这样就能满足越往后的数减去越多。 这一段区间 \([l,r]\) 只需要减去偏移量 \(l\) 即可。然后对于 \(x_i,y_i \le 10^9\) 的直接离散化。然后发现最优的情况只会出现在一个递增量变化的那一个点。显然易证,因为递增的变化是由多段一次函数组成的。

QOJ7944 Max Minus Min

我们发现这个答案满足单调性,直接二分。记原最大值为 \(x\),最小值为 \(y\) 所以原最大最小值差为 \(k\),假设二分的答案为 \(l\),贪心地,肯定会保留最大值或者最小值,只会调整一边,因为只能操作一次,不可能同时缩小最大值或者最小值。则对于值域在 \((x-k+l,x]\) 贪心地肯定不选,标记为 b,然而对于值域 \([y,y+k-l)\) 的肯定贪心地选,标记为 a。然后剩下的 \([y+k-l,x-k+l]\) 是随便选的。那么最后的如果形如 aaa...bbbb...aaa 或者 bbb...aaaa...bbb 或者 aa...aaa 或者 bbb...bbb。就是合法的,这样可以一次操作完。

P11663 [JOI 2025 Final] 勇者比太郎 2 / Bitaro the Brave 2

先破换成链,\(S_i\)\(B_i\) 前缀和。然后有

\[ans = \min\limits_{1\le i\le n} (\max\limits_{i\le j<i+n} A_j - (S_j - S_i)) \]

\[\therefore ans = \min\limits_{1\le i\le n} (S_i+ \max\limits_{i\le j<i+n} A_j - S_j) \]

于是枚举 \(i\) 然后用线段树维护 $ \max\limits_{i\le j<i+n} A_j - S_j$ 即可。

CF1716F Bags with Balls

前置:

\[n^m = \sum\limits_{k=0}^m \dbinom{n}{k} k! S(m,k) \]

组合意义证明:\(n^m\) 表示的是 \(m\) 个两两不同的球放入两两不同的 \(n\) 个盒子中的方案数(允许空集)。考虑非空集合个数为 \(k\),则从 \(n\) 个盒子(集合)中选 \(k\) 个座位非空集合,组合数 \(\dbinom{n}{k}\),又因为他是无序的,所以乘上 \(k!\)。然后将 \(m\) 个数划分进入互补区分的 \(k\) 个非空集合,即第二类斯特林数 \(S(m,k)\),又因为如果 \(k > m\)\(S(m,k) = 0\),因为失去其组合意义。所以枚举 \(k\)\(\sum\limits_{k=0}^m\)。证毕。

那么有了这个就可以开始推式子了。

\(x\) 为奇数个数,\(y\) 为偶数个数。

那么可以得到式子

\[\sum\limits_{i=0}^n i^k \dbinom{n}{i} x^i y^{n-i} \]

由前置的式子得

\[\sum\limits_{i=0}^n \sum\limits_{j=0}^k \dbinom{i}{j} j! S(k,j) \dbinom{n}{i} x^i y^{n-i} \]

拆开组合数得

\[\sum\limits_{i=0}^n \sum\limits_{j=0}^k \frac{i!}{(i-j)!j!} j! S(k,j) \frac{n!}{(n-i)!i!} x^i y^{n-i} \]

再整理得

\[\sum\limits_{j=0}^k S(k,j) \sum\limits_{i=0}^n \frac{n!}{(n-i)!(i-j)!} x^i y^{n-i} \]

观察到那一串分数容易转换成组合数,于是

\[\sum\limits_{j=0}^k S(k,j) \sum\limits_{i=0}^n \frac{n!(n-j)!}{(n-i)!(i-j)!(n-j)!} x^i y^{n-i} \]

所以得到

\[\sum\limits_{j=0}^k S(k,j) \sum\limits_{i=0}^n \frac{n!}{(n-j)!} \dbinom{n-j}{n-i} x^i y^{n-i} \]

考虑设 \(l\) 为原来的 \(n-i\),且要满足 \(n-i \le n-j\),所以 \(l \le n-j\)。于是有

\[\sum\limits_{j=0}^k S(k,j)\frac{n!}{(n-j)!} \sum\limits_{l=0}^{n-j} \dbinom{n-j}{l} x^j x^{n-j-l} y^{l} \]

观察到后面一串可以用二项式定理化简,则

\[\sum\limits_{j=0}^k S(k,j)\frac{n!}{(n-j)!} x^j m^{n-j} \]

注意到分数事实上是一个排列数所以得到最终式子

\[\sum\limits_{j=0}^k S(k,j) n^{\underline{j}} x^j m^{n-j} \]

可以直接递推预处理出第二类斯特林数,然后直接求上式即可。

P12883 [蓝桥杯 2025 国 C] 正方形构造

考虑是两条边的差值要相同,而且值域较小,所以直接枚举出所有的差,对于同样的 \(i\)\(A(cnt_i,4)\),不同的就 \(A(cnt_i,2) \times A_(cnt_j,2)\)

CF1359E Modular Stability

考虑如果有一个 \(b>a\),那么考虑 \(x\bmod a \bmod b\)\(x \bmod b \bmod a\) 的区别。那么显然前者为 \(x\bmod a\),所以使得 \(x \bmod b \bmod a = x\bmod a\) 则 $ x \bmod b\equiv x \pmod{a}$。所以只有当 \(b\)\(a\) 的倍数时,原式成立。则推广到整个序列,即满足所有非最小数都是最小数的倍数。那么是可行的。所以说直接暴力枚举最小数,然后计算出他的倍数,从倍数里面选出剩下的 \(k-1\) 个数,组合求即可。

AT_agc023_c [AGC023C] Painting Machines

题目的是染色多少次会结束。考虑转换题意,就是变成染完 \(i\) 次但是 \(i-1\) 染不完的贡献。发现如果全部染色是 \((n-1)!\),所依考虑求所有的 \(i\) 次染不完。然后染 \(i\) 次染不完和染的完是互补的。也就是说染不完实际上是 \((n-1)!\) 减去染的完的贡献。

\(i\) 次可以染完的话,考虑组合数。实际上就是需要 \(a_1 = 1\)\(a_{i} = n-1\) 才能保证头尾染到。于是对于剩下的 \(j\) 都有 \(a_{j+1} - a_j \le 2\)。所以这其实是差分数组。考虑 \(d_j = a_j - a_{j-1}\)。所以我们要求 \(d_j \in \{1,2\}\)。并且 \(\sum d_j = n-2\)

实际上就是球盒问题了。转换成 \(d_j \in \{0,1\}\),然后 \(\sum d_j = n-2 - (i - 1) = n-i-1\)。所以就是 \(i-1\) 中选 \(n-i-1\) 个。注意,还要用 \((n-1)!\) 减去这些。还要再加上全选的贡献 \((n-1)!\) 也就是总共 \(n \times (n-1)!\)

那么答案就是:

\[n\times (n-1)! - \sum\limits_{i=1}^{n-1} i! (n-i-1)! \dbinom{i-1}{n-i-1} \]

CF997C Sky Full of Stars

比较好玩的推式子题。

首先,这肯定是容斥。记 \(i\) 为行一样的数量,\(j\) 为列一样的数量。对于 \(i+j\) 是偶数的时候应该做负贡献,于是应该带容斥系数 \((-1)^{i+j+1}\)所以可以得出式子:

\[\sum\limits_{0\le i\le n, 0\le j \le n,i \ne j \ne 0} \dbinom{n}{i} \dbinom{n}{j} (-1)^{i+j-1} f(i,j) \]

可以分讨一下 \(f(i,j)\)

  • \(i= 0\)\(j= 0\) 其实是等价的,直接 \(\times 2\) 即可。那么只考虑 \(i=0\),事实上就是没有一行是都一样的,所以有 \(j\) 列相同。这个时候 \(3^j\) 就是这 \(j\) 列里的颜色。然后对于其他的,全部随便填,就是 \(3^{n\times(n-j)}\),所以此时 \(f(i,j) = 3^j \times 3^{n\times(n-j)}\)\(f(i,j) = 3^{n\times(n-j)+j}\)。所以这一部分的贡献就是

    \[2\times \sum\limits_{1\le i\le n} \dbinom{n}{i} (-1)^{i-1}3^{n\times(n-i)+i} \]

    可以 \(O(n \log n)\) 处理。

  • 而对于 \(i \ne 0\)\(j\ne 0\) 时,\(f(i,j)\) 事实上就是选定了前 \(i\) 行和前 \(j\) 列的部分被同一种颜色涂了,方案是 \(3\),然后剩下的 \((n-i) \times (n-j)\) 的方框是随便填的,方案是 \(3^{(n-i)\times(n-j)}\)。所以总方案是 \(3^{(n-i)\times(n-j)+1}\)。所以说这一部分的贡献是

    \[\sum\limits_{1\le i\le n} \sum\limits_{1\le j\le n}\dbinom{n}{i} \dbinom{n}{j}(-1)^{i+j-1}3^{(n-j)\times(n-i)+1} \]

    接下来就是推式子了。先把与 \(i\)\(j\) 有关的东西全部拆出来

    \[\sum\limits_{1\le i\le n} \dbinom{n}{i}\sum\limits_{1\le j\le n} \dbinom{n}{j} (-1)(-1)^{i} (-1)^{j} \times 3 \times 3^{n^2} \times 3^{-in} \times 3^{-jn} \times 3^{ij} \]

    然后再整理到一起

    \[- 3^{n^2+1}\sum\limits_{1\le i\le n} (-1)^{i} \dbinom{n}{i}3^{-in} \sum\limits_{1\le j\le n} (-1)^{j} \dbinom{n}{j} 3^{-jn} \times 3^{ij} \]

    此时就剩下一个 \(3^{ij}\) 比较难搞。考虑如何将他放入 \(3^{-jn}\)

    \[- 3^{n^2+1}\sum\limits_{1\le i\le n} (-1)^{i} \dbinom{n}{i}3^{-in} \sum\limits_{1\le j\le n} (-1)^{j} \dbinom{n}{j} (-3^{i-n})^j \]

    观察后面关于 \(j\) 的部分,可以用二项式定理 \((a+b)^n = \sum\limits_{0 \le i \le n} \dbinom{n}{i} a^i b^{n-i}\) 化简,将 \(a=1\)\(b=-3^{i-n}\) 带入。但是二项式定理会包含 \(j=0\),而原式是从 \(1\) 开始,也就是减去 \(j=0\) 的部分贡献。这一部分的贡献就是 \(1\)。所以有

    \[- 3^{n^2+1}\sum\limits_{1\le i\le n} (-1)^{i} \dbinom{n}{i}3^{-in} ((1-3^{i-n})^n -1 ) \]

    这样这一部分就可以 \(O(n \log n)\) 求解了。

所以最终答案是

\[2\times \sum\limits_{1\le i\le n} \dbinom{n}{i} (-1)^{i-1}3^{n\times(n-i)+i}- 3^{n^2+1}\sum\limits_{1\le i\le n} (-1)^{i} \dbinom{n}{i}3^{-in} ((1-3^{i-n})^n -1 ) \]

P13778 「o.OI R2」=+#-

我们发现每一次大概会是连着选一段上升的区间,然后你下一个选的是 \(y\),当前是 \(x\) 所以肯定能满足 \(y \le x+1\)。而且答案有单调性,考虑二分我们选多少个数,然后贪心的从大往小选他们,然后看能否在 \(n\) 时间内选完即可。

ARC214C - Divide into 4 Teams

首先,发现 Dp 非常难搞,可以得到一个 \(O(n V^2)\) 的 Dp,但是发现很难优化,考虑组合意义。首先,如果 \(\sum P\) 为奇数,方案 \(0\)。那么我们设 \(X\) 代表一个集合 \(U = \{1,2,\dots,n\}\) 的一个子集满足 \(\sum\limits_{i\in U} P_i = \frac{\sum P}{2}\) 的方案数。那么 \(X\) 是很容易通过 Dp 求解的,时间复杂度是 \(O(nV)\)。那么我们考虑如何将 \(X\) 算成答案。首先,设四个团队的集合分别为 \(A\)\(B\)\(C\)\(D\),那么题目是 \(\sum A = \sum B\)\(\sum C = \sum D\),于是有 \(\sum A + \sum C = \frac{\sum P}{2}\)\(\sum B + \sum D = \frac{\sum P}{2}\)。所以集合 \(A \cup B \cup C\) 如果被选定,那么 \(D\) 就是剩下的,也就满足了,所以转换成了考虑 \(A \cup B \cup C\) 且满足 \(\sum A + \sum C = \frac{\sum P}{2}\) 的方案数,又因为 \(\sum A = \sum B\),所以 \(\sum C \cup B = \sum A \cup C = \frac{\sum P}{2}\)。那么再次转化成了求两个 \(\sum = \frac{P}{2}\) 的集合满足交集非空,且对称差集非空。那么所有的方案数就是 \(X^2\) 再减去 \(X\) 个空交集和 \(X\) 个空对称差集的方案。于是答案就是 \(X^2 - 2X\)

P10777 BZOJ3706 反色刷

先下结论,定义一个点的度数为这个点的出边是黑色的个数,如果一个连通块里的点度数都不为奇数,那么这个连通块可以在一次操作填完。

证明:对于一条白边 \((u,v)\),考虑变成两条黑边 \((u_1,v_1)\)\((u_2,v_2)\),其中 \(u_1 = u_2 = u\)\(v_1=v_2=v\),然后如果这个图是一个欧拉回路,那么一次走完,否则无解。那两条黑边的意义是什么呢?对于原本的黑边,代表着走了一遍就是修改了一遍,两条黑边代表的是白边修改了两遍改回了白边,这样修改完,所有的都是白边。然而在无向图的欧拉回路中,判断合法的条件就是有没有奇数度数的点。而对于这道题的白边实际上是两条边,所以对奇偶没有影响,只需要考虑黑边的度数奇偶性即可。得证。

然后按照上述结论去模拟,预处理出并查集后,动态维护答案即可。

P9126 [USACO23FEB] Moo Route II S

对每一个点所有的出边进行起飞时间倒序排序。然后在跑最短路的时候,遍历每一条边是从大到小,然后遇到一条边的起飞时间比当前的时间小,直接 break 即可。最短路直接用 Dij,但注意,由于时间有往回跑的,所以不要打标记,或者直接 SPFA。

Day8 模拟赛 T1

题意:给定正整数 \(n\)\(k\)。一个长度为 \(n\) 的序列 \(a_i\),其中每个 \(aᵢ \in \{1,2,…,k\}\)。定义该序列的稳定性函数 \(f(a)\):,令 \(f(a) = \min\left\{ j-i \;\middle|\; 1\le i<j\le n,\ a_i=a_j \right\}\),求所有 \(k^n\) 个可能序列的 \(f(a)\) 之和。

考虑枚举 \(l\)\(\min \{j-i\}\),求 \(f\) 的总和。发现一个性质,对于每一个区间 \([i-l+1,i]\) 里的数必须互不相同。然而,如果要使得 \(f(a) = l\) 那么必须有一个 \(a_{i-l} = a_i\)\(a\) 当中。那么考虑如何构造。首先是 \([1,l]\) 这个区间,实际上是随便乱填,那么他的方案是 \(\dbinom{k}{l} l!\),然后剩下的位置肯定是必须选前面 \(k\) 一样的或者选跟前面的 \(k\) 个不一样的(有 \(k-i\) 种情况),所以枚举 \(j\) 是多少个必须选,那么得到式子 \(\sum\limits_{j=1}^{n-l} \dbinom{n-l}{j}1^j \times (k-l)^{n-l-j}\)。然后直接二项式定理得到 \((k-l+1)^{n-l}\),还要减去 \(j=0\),即 \((k-l)^{n-l}\)。所以说 \(\sum\limits_{j=1}^{n-l} \dbinom{n-l}{j}1^j \times (k-l)^{n-l-j} = (k-l+1)^{n-l}-(k-l)^{n-l}\)。但是组合意义也可以证明 \((k-l+1)^{n-l}-(k-l)^{n-l}\),解释为对于后面所有 \(n-l\) 的点 \(x\),可以选一个与前面都不同的,或者选一个 \(a_{x-l} = a_x\) 的数,这些部分的方案是 \((k-l+1)^{n-l}\),但是由于题目要求,还必须要选一个 \(a_{x-l} = a_x\),所以要减去只选了与前面不同的点,即贡献 \((k-l)^{n-l}\)。同样是 \((k-l+1)^{n-l}-(k-l)^{n-l}\)。于是最后的式子就是

\[\sum\limits_{l=1}^k \dbinom{k}{l} l! ((k+1-l)^{n-i} - (k-i)^{n-i}) \times l \]

预处理后线性解决。

P12999 [GCJ 2022 #3] Mascot Maze

神奇的是竟然 \(13\) 个字母不是白给的,如果对于有边 \((u,v)\)\((v,w)\) 那么 \((v,w)\) 也是矛盾的。所以我们根据这样建出一个新图,就是矛盾的关系。由于每一个点的度数是 \(2\),所以建出的无向图矛盾关系的度数肯定会有一个点小于等于 \(12\)。所以 \(13\) 个字符正好可以保证合法,而不合法的时候当且仅当连出一个矛盾是 \((u,u)\)。所以说,我们直接做一个类似拓扑的东西,将他的矛盾关系用 BFS 的顺序便利出来。然后从后往前去填颜色即可。

QOJ-9922

不知道为什么赛时没有想出来,不知道为什么 jiangly 讲了半句话我就会了。首先发现,同样顺子的个数必定是 \(<3\) 的,如果 \(\ge 3\) 的那么肯定优先 \(\{ x,x,x\}\)。所以说,我们可以直接三进制状压掉除了 \(\{x,x,x\}\) 的情况剩下的每一个值出现多少次,这样的状压是 \(3^8\) 的。但是 $O(3^8n) $ 大概会炸,考虑枚举 \(\{x,x,x\}\) 的状态,这样是 \(3^6\) 的。然后动态维护每一个状态的累计数量,然后每一次计算相当于是对于当前状态,再减去枚举的状态,就是剩下的状态就是区间左端点的差分状态。统计答案即可。

P14888 Pair Counting

\(u\)\(v\) 的距离为 \(dis(u,v)\),考虑分讨:

  • \(dis(u,v)\) 为偶数时,直接在路径中间找个切点,一次解决。合法。因此后面只考虑奇数。

  • \(dis(u,v) = 1\) 时,都已经相邻了,可以证明无论如何都不合法的。

  • \(dis(u,v) = 3\) 时, 如果 \(u\) 还有一个非 \(dis(u,v)\) 路径上的出边,可以在他们们中间找一个距离 \(v\) 一个单位的位置割掉,然后 \(u\) 往非路径出边走一格,然后 \(v\) 往之前割掉的点走,然后两次操作解决,合法。\(u\)\(v\) 交换同理,合法条件是必须有一个不是叶子。

  • \(dis(u,v) \ge 5\) 时,可以从 \(dis(u,v) = 3\) 推广到过来。但是由于路径够长,所以其中一个点可以往回走,因此不再要求需要非叶子节点的限制。因此保证合法。

因此得到结论,不合法的情况当且仅当 \(dis(u,v)=1\) 或者 \(dis(u,v) = 3\)\(u\)\(v\) 都是叶子。

可以拿 DFS 也可以随便标记记录即可。

CF1743F Intersection and Union

对每一位考虑方案数,发现对于 \(1\) 进行三种运算后得到的 \(6\) 种结果,其中有 \(4\) 个是变成 \(1\),然后 \(0\) 进行运算有 \(2\) 个变成 \(1\),考虑概率,所以说 \(1\) 进行一次操作后有 \(\dfrac{2}{3}\) 概率变成 \(1\)。然而对于 \(0\) 操作,每一个数是有 \(\dfrac{2}{3}\) 保持不变的,所以对于区间 \([1,L-1]\)\([R+1,V]\) 这一部分是 \(0\),直接按照概率乘 \(\dfrac{2}{3}\) 即可。而对于区间 \([L,R]\),是与 \(1\) 的随机操作,推平成 \(\dfrac{2}{3}\) 即可,用线段树维护区间即可。

P14889 Key Point

异或哈希题。

首先它是一个有向边的树,那么我们发现,有一个性质就是,如果所有的点除了 \(k\) 点都有出边,那么所有的点都可以到达 \(k\)。显然,如过所有点都有出边,那么 \(n-1\) 边都是对应着除了 \(k\)\(n-1\) 个点的唯一出边,那么点 \(k\) 就没有出边,所以钦定 \(k\) 是这棵树的根,那么它的所有儿子都指向他,又因为它的所有儿子都有且仅有一条出边,所以它的所有儿子不能往下指,于是,它的儿子的儿子总是指向它的儿子。推广到全树,所有的点都往根节点指,于是所有的点都可以到达 \(k\)

\(d_i\) 为每一个点 \(i\) 的出度,于是,对于每一个的询问,我们要维护对于所有 \(i \neq k\) 都有 \(d_i = 1\)。我们发现可以对 \(d_i\) 的奇偶性做哈希,也就是异或哈希,先设 \(w_i\) 为一个 long long 范围的随机数,那么它对应的是每一个点的一个值。然后设 $S = \bigoplus\limits_{i=1}^n w_i $。那么显然有 \(\bigoplus\limits_{i\neq k} w_i = S \bigoplus w_k\)。对于异或 \(w_i\) 我们的目的是,让他合法的时候出现,不合法的时候不出现,所以我们把它改成 \(\bigoplus\limits_{i\neq k} \bigoplus\limits_{j=1}^{d_i} w_i\)。当且仅当 \(d_i\) 为什么呢?因为如果 \(d_i = 1\) 那么奇数合法,如果有任意一个 \(d_i > 1\) 都会导致有 \(d_j = 0\),于是就不合法了。所以这样异或能使得统计到所有正好合法的 \(d_i = 1\)

那么题意就变成了要维护 \(d_i\) 然后判断 $\bigoplus\limits_{i\neq k} \bigoplus\limits_{j=1}^{d_i} w_i = S \bigoplus w_k $ 是否成立。

由于这个图是在基于树上的。所以我们可以直接维护 \(x\) 的所有儿子 \(j\)\(w_j\) 异或和,再记录 \(x\) 的儿子 \(j\) 为出边的 \(w_j\) 的异或和。然后在用一个 multiset 维护节点 \(x\) 的出边的是哪些点,这样由于边数 \(n-1\) 所以均摊是线性。维护的过程中,对于所有的加操作或者减操作,直接异或就行了,因为我们只关注它的奇偶结果。然后所有操作,就直接模拟即可。

P4107 [HEOI2015] 兔子与樱花

直接考虑贪心,首先对于一个 \(u\) 的所有儿子 \(v \in son_u\) 都肯定是按照 \(c_v + son_v\) 的顺序贪心,证明:如果 \(c_x + son_x < c_y + son_y\) 时,设上限是 \(M\),则若 \(c_x + son_x < c_y + son_y > M\) 时,若 \(c_y + son_y \le M\) 则肯定有 \(c_x + son_x \le M\),根据决策包容性得证。另一个结论是从叶子网上贪心,证明:显然如果儿子不能合成到父亲,那么显然父亲更不能合成到祖先,因此贪心地优先选择深度深的点,选到不能选为止。

P13108 [GCJ 2019 #1A] Alien Rhyme

字典树维护即可,贪心的从下往上选。

CF1753D The Beach

对于这种由直接依赖关系的可以用图论解决。可以轻松列出对应的关系,例如 \(s_{i,j} = L\) 时,可以通过旋转,将 \((i,j)\) 空出来,然后使得 \((i-1,j+1)\) 或者 \((i+1,j+1)\) 填上,那么我们直接 \((i-1,j+1)\)\((i+1,j+1)\)\((i,j)\) 连边,贡献是 \(p\)。同理对于移动操作,我们可以让 \((i,j+2)\)\((i,j)\) 连边贡献为 \(q\)。同理,我们可以列出另外四种字母的情况。然后我们将所有的空地加入优先队列,直接跑最短路就是答案。

Day9 D

题目大意:对于一个序列 \(a = \{1,2,\cdots,n\}\)\(a_i\) 代表古董的价值,对于第 \(i\) 天,小明免费获得 \(a_i\) 价值的古董(也可以选择不获得),他可以考虑卖掉它,获得 \(a_i\) 的收益,也可以留到 \(i+1\) 天(也可以无限往下留),然后 \(a_i = a_i + 1\)。小明手上最多一个古董,只有卖掉了一个才能去获取下一个。然后记 \(f(l,r)\) 为序列 \([a_l,a_{l+1},\cdots,a_{r}]\) 的小明按贪心策略选取的最大收益。求 \(\sum\limits_{l=1}^n \sum\limits_{r=l}^n f(l,r)\)

一道好题,实际上很简单,但是赛时被硬控 4h 而且没过,我分讨了很多种情况,然后维护多个前后缀和,和二次前后缀和,还维护了区间修 \(\{x,x+1,x+2,\cdots,x+len\}\) 这样的线段树。调的我头大。赛后膜拜了 F 先生的解法,发现十分优雅。

首先,考虑如果开头都是 \(a_l \ge 1\) 的话,那么我们发现,我们可以将 \(a_i \le 0\) 的数的贡献 \(a_i\) 设为 \(1\)。这样对于一个 \([l,r]\) 区间的贡献就是 \(\sum\limits_{l\le i \le r} a_i\),证明:对于所有 \(a_i \ge 1\) 的数,当然不会用到延续到 \(i+1\) 天的操作。而对于 \(a_i < 1\) 我们可以直接当作延续 \(i+1\) 天,也就是贡献为 \(1\)

对于是 \(a_l < 1\) 的话,基本上,目的都是计算前面一部分贡献,然后再计算后面一部分贡献,后面部分的贡献就是开头 \(a_l \ge 1\) 的情况那么我们发现他会有下述情况:

  • 一直不选,直到出现一个 \(a_l \ge 1\) 的数才开始,这样前面一部分的贡献就是 \(0\)

  • 从他开始选,然后拿着它,每天不断累积 \(+1\)。也就是说,在 $i + (1-a_i) $ 天时,他就会变成一个正数,然后卖掉,然后后面一部分就按照上述开头 \(a_l\ge 1\) 的贡献来计算。

我当时赛时的时候就对他们进行了分讨,这也让我维护的数据变得非常多

然而我们发现,对于 \(l\) 的答案 \(f_l\),是不是可以 \(f_l = \max(f_l ,f_{l+1})\)。因为如果有一个 \(f_{l+1} > f_l\) 那么显然 \(f_l\) 能够有 \(f_{l+1}\) 的贡献,这是因为我们只需要把 \(a_l\) 不选,然后留到 \(l+1\) 即可。

所以说计算 \(f_l\) 只需要考虑上述两种情况。这个是好算的。而对于后面部分 \(a_{l'} \ge 1\) 的贡献只需要开一个前缀和数组 \(t\) 记录的是 \(\max(1,a_i)\) 的前缀和,和数组 \(s\) 记录 \(t\) 的前缀和,然后套路的差分一下就行了。

另外,这一题对于 \(f_l = \max(f_l ,f_{l+1})\) 之前不能取模,因为你要保证的是原值的最大值,而不是取模后的最大值。

Day 9 A

简单题,题面略。发现差分后,就是一个回文串,直接跑马拉车即可。

P10371 「LAOI-4」石头

首先是,对于一个区间 \([l,r]\),记 \(\max(a_{[l,r]}) = a_p\),他会是 \(l\) 往左走,走到第一个 \(>a_p\) 的数就停止,然后往回走。\(r\) 往右走,然后走到第一个 \(>a_p\) 的数停下来,往回走,然后他们在会经过 \(p\) 然后到达另一边。

那么形式化的说:对于一个区间 \([l,r]\),有 \(a_L\)\(L < l\) 且第一个 \(a_L > a_p\) 的点,然后 \(a_R\)\(R > r\) 且第一个 \(a_R > a_p\) 的点。

若有 \(l-L = r-R\) 则这是一种方案。因此对于 \(l<p<r\) 的情况。我们直接枚举 \(p\),然后得出 \(p\) 前一个比他大的值,和后一个比他大的值。然后统计答案即可。

可以直接从值域大到小枚举,然后动态更新维护链表。可以做到 \(O(1)\)\(O(1)\) 查。时间复杂度 \(O(n)\)

而对于 \(p=l\)\(p=r\) 的情况,需要维护一下左右两边的次大值,维护方式类似。

CF1732D2 Balance (Hard version)

用 set 乱搞。维护三个集合,\(s\) 表示题目的集合,\(s1\) 表示维护着每一个值 \(k\),为有可能成为答案的集合,\(s2\) 表示每一个数 \(x\) 的因子集合,然后维护有可能成为答案的因子即可。总之就是乱搞时间复杂度不明,烂题。

QOJ 15309. Dumb Problem II

\(p\)\(\{1,2,\dots,n\}\) 的排列。\(f(p)=\{i \ |\ 1\le i\le n,\forall j<i | p_i > p_j \}\)\(g(p)=\{p_i \ |\ 1\le i\le n,\forall j<i | p_i > p_j \}\)。给定 \(k\) 个长度为 \(k\) 的随机排列 \(p\),求出现本质不同的 \(g(p)\) 的期望个数。

由于 \(p\) 为排列,显然 \(g(p)\) 本质不同个数等效于 \(f(p)\) 本质不同个数。所以实际上求 \(f(p)\) 本质不同的期望即可。

考虑 \(i\)\(f(p)\) 中出现,则 \(\max(\{p_1,\dots,p_i\}) = p_i\),由于是排列,所以对于 \(\forall j < i\) 的 $ p_j = \max({p_1,\dots,p_i})$ 概率是一样的,所以 \(p_i = \max\) 概率为 \(\dfrac{1}{i}\),不为 \(\max\) 的概率就是 \(\dfrac{i-1}{i}\)

所以考虑有 \(t\) 个排列的 \(f(p)\) 不同,则期望应该为 \(\prod\limits_{i=1}^n ((\dfrac{1}{i})^t + (\dfrac{i-1}{i})^t)\)
。枚举的每一个 \(i\) 代表这一个数 都出现 或者 都不出现 的概率。然后乘法原理求积即可。

然后再枚举 \(t\),组合意义一下得:注意,还得容斥,因为会重复。

\[\sum\limits_{t=1}^k (-1)^{t-1}\dbinom{k}{t}\prod\limits_{i=1}^n ((\dfrac{1}{i})^t + (\dfrac{i-1}{i})^t) \]

P14662 异邻或居

结论题:

记 $f(n) = \bigoplus\limits_{i=1}^n i $。

有结论:对于 \(1\le n \le 100\) 有:

  • \(n \bmod 4 =0\) 时,\(f(n) = n\)
  • \(n \bmod 4 =1\) 时,\(f(n) = 1\)
  • \(n \bmod 4 =2\) 时,\(f(n) = n+1\)
  • \(n \bmod 4 =3\) 时,\(f(n) = 0\)

那么根据这四种情况分讨:

\(n \bmod 4 =0\)\(f(n) = n\) 时:

特判掉 \(n = 2^k\),显然不行,在二进制下最高位会独立。无论与谁异或,都只有一个。显然不合法。

然后不妨将点分三组,然后三组之间互相两边,组内不连边。

将只有 \(n\) 划分为第一组,这样他的临节点异或和为 \(n \oplus n\)\(0\)。所以考虑其他点的临节点异或和也得是 \(0\)。所以可以对于 \(n\) 的二进制下所有整 \(2^p\) 的数归为一类。如 \(6 = 2^1 + 2^2 = 2+4\) 所以将 \(2\)\(4\) 归为第二类。这样这一类的异或和为 \(n\)。所以他们的临节点异或和为 \(n\oplus n = 0\)。第三类就是剩下的数。第三类的所有数的临节点就是第一类和第二类的异或和,也是 \(n \oplus n=0\)

上述即一种合法构造方式。

\(n \bmod 4 =1\)\(f(n) = 1\) 时:

\(n=1\) 特判掉,答案为 \(0\)

然后分三组,\(1\) 在第一组,\(2\)\(3\) 在第二组,其余第三组。组之间互相连边,组内不连,正确性显然,模拟一下发现,所有的点的临节点异或和为 \(0\)

\(n \bmod 4 =2\)\(f(n) = n+1\) 时:

\(1\)\(n\) 分到一类,\(2\)\(n-1\) 分到第二类,其余分第三类。这样依旧是每一个组之间连边,组内不连。正确性同上显然。

\(n \bmod 4 =3\)\(f(n) = 0\) 时:

只用分两组,第一组是 \(1\),其他就是第二组,然后第一组连到第二组。其实就是一个菊花图。正确性同上显然。

这题的关键就是发现 \(f(n)\) 的规律,然后分讨。将所有点分组,然后利用异或的性质,构造出组内的异或和一样,那么只需要每一个组内的点连到其他组的点。临节点异或和就相等了。

QOJ-15042 Card Game

对于 Alice 如果有两个颜色一样的,那么她可能会用这两个数得分,所以考虑如何阻止。例如 \(n=4\),那么当 Alice 第 \(2\) 次和第 \(4\) 次下 \(1\) 这张牌,然后 Alice 没有 \(3\) 这张牌,所以你必定有两张 \(3\)。于是令 \(1\)\(3\) 是对应的。这个时候你只需要在 Alice 的前一步放下 \(3\),就可以阻止他。即在 \(1\)\(3\) 这两个位置放 \(3\)。于是若 Alice 没有在第一次就放了一个自己有两张牌的数,那么肯定能够有办法阻挡 Alice 得分,即 \(0\) 分,否则她 \(1\) 分。构造的话,就例如上构造,然后剩下的两个人都共有的牌,一定在 Alice 出了那一张再出。然后剩下如果还有剩,随便填即可。

QOJ-14729 rganize the Bookshelf

观察到,如果所有数出现次数 \(num_x\) 为偶数,那么有解。

然后对于一个操作交换 \(a_i\)\(b_i\),代价是 \(0\)。所以可以随便上下交换,所以不用在乎他是在 \(a\) 还是在 \(b\)。所以,对于每一个数 \(x\),记 \(p_i,1 \le i\le num_x\) 为每一个值为 \(x\) 的数出现的位置(可以是在 \(a\) 中也可以是在 \(b\) 中),然后 \(p_i\) 排序后,相当于要进行操作使得 \(\forall i ,1\le i \le \frac{num_x}{2},p_{2i-1}=p_{2i}\)。显然这是让他们两两相同的最佳贪心策略。所以可以知道最后的答案为:

\[\frac{1}{2}\sum\limits_x \sum\limits_{i=1}^{\frac{num_x}{2}} (p_{2i}-p_{2i-1}) \]

考虑如何贪心构造。

考虑对于每一个 \(l\)。我们已经处理好了 \([1,l)\),然后目前需要处理 \(l\)

那么用 \(nxt_x\) 表示值 \(x\) 的下一个出现位置。

那么对于 \(nxt_{a_l} \le nxt_{b_l}\) 的时候,我们选择交换 \(b_l\)\(nxt_{a_l}\)

否则交换 \(a_l\)\(nxt_{b_l}\)

因为选择最短的交换肯定是不劣的。

那么就第一种情况,如果 \(nxt_{a_l}\)\(b\) 当中的。我们需要进行操作 \((l,l)\) 即交换 \(a_l\)\(b_l\)

所以操作次数最多为 \(2n\)。但是题面给的 \(3n\)。所以可以在 \(nxt_{a_l} > nxt_{b_l}\) 的时候直接交换 \(a_l\)\(b_l\)。省掉一个分讨。这样次数就是 \(3n\) 的。

posted @ 2026-02-07 13:32  gsczl71  阅读(9)  评论(0)    收藏  举报