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_{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
神仙题。考虑最简单的转移方式:
考虑如果 \(j\) 到 \(i\) 直接跳最优会怎样。那么如果最劣的情况是一个一个跳,即 \((i-j) \times n\),因为 \(a_i \le n\) 所以 \(a_i\) 最多都是 \(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\) 前缀和。然后有
于是枚举 \(i\) 然后用线段树维护 $ \max\limits_{i\le j<i+n} A_j - S_j$ 即可。
CF1716F Bags with Balls
前置:
组合意义证明:\(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\) 为偶数个数。
那么可以得到式子
由前置的式子得
拆开组合数得
再整理得
观察到那一串分数容易转换成组合数,于是
所以得到
考虑设 \(l\) 为原来的 \(n-i\),且要满足 \(n-i \le n-j\),所以 \(l \le 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)!\)。
那么答案就是:
CF997C Sky Full of Stars
比较好玩的推式子题。
首先,这肯定是容斥。记 \(i\) 为行一样的数量,\(j\) 为列一样的数量。对于 \(i+j\) 是偶数的时候应该做负贡献,于是应该带容斥系数 \((-1)^{i+j+1}\)所以可以得出式子:
可以分讨一下 \(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)\) 求解了。
所以最终答案是
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}\)。于是最后的式子就是
预处理后线性解决。
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\),组合意义一下得:注意,还得容斥,因为会重复。
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}\)。显然这是让他们两两相同的最佳贪心策略。所以可以知道最后的答案为:
考虑如何贪心构造。
考虑对于每一个 \(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\) 的。
本文来自博客园,作者:gsczl71,转载请注明原文链接:https://www.cnblogs.com/gsczl71/p/19588390
gsczl71 AK IOI!RP = INF 2024年拿下七级勾!
浙公网安备 33010602011771号