パ研合宿2024部分选做

AtCoder-pakencamp_2024_day3_1_k

yza 把每个细节拉出来给我讲三遍然后我再给他讲一遍终于也是搞懂了(

你发现其实我们要处理的并非 \(P_i\),而是 \(P_i,P_{i+1}\) 之间的间隙对应的关系,如果说一开始对应关系就满足那么不用处理。

其实题目给的偶数位 \(x\) 满足 \(P_{x-1} < P_{x} > P_{x+1}\) 比较好入手,考虑分成这样的三元组 \((P_{x-1},P_{x},P_{x+1})\) 处理,我们对于三元组之间间隙的代表关系的目标分类讨论。

你发现改变间隙的状态是依靠交换 \(P_x,P_{x-1}\) 或者 \(P_x,P_{x+1}\) 来改变,但很明显这样可能影响到左右两边另外的三元组(实则三元组之间有交集),对于有影响的情况你要先操作两边的三元组再操作中间的,考虑根据这个关系建图,无解的状态就是有环拓扑跑不出来,但是你发现无解的情况不存在,因为如果说左边的三元组的中间值对中间三元组的中间值有影响,那么中间三元组的中间值在交换的时候一定是不会向左交换,环并不会产生。

  • 目标状态 \((0,1)\)

    • 一开始就是这样的,不用操作。
  • 目标状态 \((1,0)\)

    • 你发现三元组一开始的状态是 \(P_{x} > P_{x-1} > P_{x+1}\) 或者 \(P_{x} > P_{x+1} > P_{x-1}\),前者交换 \(P_{x},P_{x+1}\),后者交换 \(P_{x},P_{x-1}\),方向上来看就是中间值分别向右、向左交换。
    • 考虑三个三元组 \((x,y,z)\) 的中间值 \(m_x,m_y,m_z\),假设 \(m_y\) 向右交换,那么它能够影响到 \(m_z\) 的充要条件是 \(m_y > m_z\),这时候就可以由 \(pos_{m_z} \to pos_{m_y}\) 连边了。
  • 目标状态 \((1,1)\)

    • 中间值向左交换就行,其余同理。
  • 目标状态 \((0,0)\)

    • 中间值向右交换就行,其余同理。

你发现对于每个三元组一定是在一次 \(1\) 操作,两次 \(2\) 操作以内处理完,拓扑的时候存下拓扑序按拓扑序构造答案就行,一开始预处理出初始满足状态的位置。

Submission

AtCoder-pakencamp_2024_day3_1_i

题面愣是没读懂。

要求 \(S,T\) 唯一,也就是说 \(A,B\) 的集合是一定的。

想到连边 \(S_i \to T_i\),这样就是一棵树,假设对于树上一点 \(R_u\) 我们给它 \(R_u \times x\),保证集合不变的情况下我们需要 \(\forall v \in \{son_u,fa_u\},R_v \leftarrow R_v \times \frac{1}{x}\)

这样会跟点在树上的深度挂钩,某一层乘 \(x\) 相邻奇偶性不同的层乘 \(\frac{1}{x}\)

考虑其本质,如果集合内的所有数有公因数 \(k \neq 1\),那么在整个集合除以 \(k\) 之后一定会有一种办法新构造 \(S,T\),这并非我们想要的结果。

刚才我们提到相邻奇偶性层数的点乘的数不同,本质上是将原本集合划分成两个。

然后你发现 \(n\leq 18\),直接枚举集合状态,然后你的目标就是找到是否存在划分出的每个集合 \(\mathbb{S}\),使得 \(\gcd\limits_{x\in \mathbb{S}}{x} = 1\),若存在这样的划分方法,那么就合法,否则不合法。

submission

AtCoder-pakencamp_2024_day3_1_m

跟前面某题很像呵。

\(R\) 写成两排很想二分图,考虑连边,你发现 \(R_i,R_{i+n}\) 的关系其实 \(P_i,Q_i\) 是可以决定的,并且 \(P_{i},Q_i\) 是捆绑的。

这么看来 \((P_i,Q_i)\) 很像是两个限制,即二维偏序,那你考虑按照 \(P\) 从小到大排序,在考虑 \(O(n\log n)\) 考虑 \(Q\)

首先 \(i\) 后面的 \(j\) 一定满足 \(P_j > P_i\),那么这样去考虑 \(Q\),找到 \(\max{Q_i}\) 对应的位置 \(pos\),对于 \(pos\) 上下连边状态分类。

  • 连边为 \(Q_{pos} \to P_{pos}\),即 \(R_{pos+n} > R_{pos}\)

    • 此时对于 \(i\in [pos+1,n]\),所有 \(S_i\) 都为 \(0\),此时后面都不用考虑了。
  • 连边为 \(Q_{pos} \leftarrow P_{pos}\),即 \(R_{pos+n} < R_{pos}\)

    • 可得 \(S_{pos} = 1\),其余暂不可得。

那么我们可以转化一波:

  • 操作 \(1\):删除当前 \(\max{Q_i}\) 对应 \(pos\) 开始的后缀。
  • 操作 \(2\):删除 \(\max{Q_i}\)

求删完 \(Q\) 的方案总数。

考虑一波打表和瞎猜瞎证明,你发现假设我们只进行操作 \(1\),每次选择删除的后缀的 \(pos\) 对应的 \(Q_{pos},pos\) 都单减,从左往右扫来看就是单增的,也就是说操作序列是上升子序列,答案就是上升子序列的个数。

怎么将操作 \(2\) 融合进去呢?

其实根本不用多余的东西,你发现上升子序列不一定连续,那么中间空出来的位置的数就是之后会用操作 \(2\) 处理的,每次算上空位置就行。

考虑线段树维护 dp。

Submission

AtCoder-pakencamp_2024_day3_1_b

考虑如何 \(O(n^2)\),记 \(f_i\) 表示前 \(i\) 个变成 \(K\) 连续段的最小花费。

首先从上一个直接跳:\(f_i \leftarrow f_{i - 1} + w_i\)

\(sumw_i\)\(w\) 的前缀和,\(sumc_{i}\) 为每种 \(c_i\) 的前缀和。

如果前 \(i\) 个中有 \(tot \geq K\)\(c_i = c_j\),那么就可以转移 \(f_i \leftarrow f_{j-1} + sumw_{i} - sumw_{j-1} - (sumc_{i} - sumc_{j} + w_j)\),你考虑拿队列存 \(c_i = c_j\) 的位置就可以每次取队头转移就是 \(O(n)\)

AtCoder-pakencamp_2024_day3_2_g

题意转化成如果说 \([i,j]\) 为合法括号序列,那么如果指针 \(x = i - 1\),可以直接跳到 \(x = j\),求最后 \(x = \left|S\right|\) 的方案数。

其实合法括号序列很好判,考虑 ( 赋为 \(1\)) 赋为 \(-1\),那么这样一来前缀和 \(pre_i = pre_j\)\([i,j]\) 便合法……吗?

并非,其实 ))(( 这样的字串也会被判成合法括号序列,但是你发现,每遇到一个 )\(-1\),也就是说如果出现了 \(pre_i < pre_{i+1}\)\(pre_{i} < pre_{i-1}\) 的情况一定不合法。

这样一来考虑 dp,记 \(f_{i}\) 表示跳到 \(i\) 的方案数,朴素的 \(O(n^2)\) 是枚举 \([1,i]\)\([j,i]\) 是否合法然后转移:\(f_i \leftarrow f_{i-1} + \sum\limits_{j=1}^{i}{f_j[j \sim i \text{ is legal}]}\)

考虑如何优化,记 \(sum_{pre_i}\) 表示满足 \(pre_i = pre_j\) 的答案的和,同时用队列存 \(pre_j\) 的位置,接下来就是处理不合法情况,可以用线段树处理出 \(pre_i\) 最后出现的位置 \(lst\),那么 \(lst\) 之前的都不可选,就一直弹队头直到合法,每次减去 \(sum_{pre_i}\) 中队头的答案,之后更新 \(f_i \leftarrow f_i + sum_{pre_i},sum_{pre_i} \leftarrow sum_{pre_i} + f_i\) 同步更新线段树的内容。

Submission

AtCoder-pakencamp_2024_day3_2_e

小清新思维题。

一眼最大环,实则并非。

对于上坡路很显然贡献是 \(0\),然后你发现因为是环所以最后它一定是回到与起点的同一水平线,那么其实不难发现每一段上坡长度一定对应一段下坡长度,也就是说 \(\sum\limits_{i=1}^{n}{H_{v_{i-1}} - H_{v_i}} = 0\)

这一点发现了其实就比较好做了,因为上坡路贡献为 \(0\),那么答案一定是 \(\frac{\sum\limits_{i=1}^{n}{\left|{H_{v_{i-1}} - H_{v_i}}\right|}}{2}\),再把 \(\frac{1}{n}\) 乘进去就是 \(\frac{\sum\limits_{i=1}^{n}{\left|{H_{v_{i-1}} - H_{v_i}}\right|}}{2n}\)

此时肯定会去想找最大边别的先不管,然后你发现你把小的边加进去反而稀释答案,所以找到最大边连接的二元环即为最大。

Submission

posted @ 2025-04-16 20:13  xAlec  阅读(44)  评论(0)    收藏  举报