A tow-day exam

D1

T1l

\(des:\)

给出一棵树,判断树上两条路径是否相交

\(sol:\)

判断其中一条路径的两个端点以及两端点的 \(lca\) 是否存在于另一条链上

由于这是一棵树,任一点为根后这样判断一定是可行的,不存在两条链是一个 \(\times\) 的形态

判断点是否在树上的一条路径上的时间复杂度为 \(O(logn)\),树剖处理出所有的链,判断该点是否存在于某一区间即可

T2

\(des\)

定义 \(f(l, r) = max(a_i - a_j), 其中 l <= i,j <= r\)

\[\sum_{i = 1} ^ {n} \sum_{j = i} ^ {n} f(i, j)\]

\(sol\)

考虑转化

该问题等价于所有区间的最大值 - 所有区间的最小值

这样的话考虑每个点作为区间最大值所带来的贡献

\(pre_i\) 表示最大的 \(j\) 使得 \(a_j > a_i 且 j <= i\)

\(bhd_i\) 表示最小的 \(j\) 使得 \(a_j > a_i 且 j >= i\)

显然 \(a_i\) 所产生的贡献为 \((i - pre_i + 1 + bhd_i - i + (i - pre_i) * (bhd_i - i)) * a_i\)

对于最小值产生的负贡献依旧如此

对于 \(pre, bhd\) 可以用单调栈线性求出

T3

\(des\)

给出一棵树

定义 \(f(l, r)\) 表示为了使得 \([l, r]\) 号点联通所需要的最小边数

\[\sum_{i = 1} ^ {n} \sum_{j = i} ^ {n} f(i, j)\]

\(sol\)

D2

T1

\(des\)
二位直角坐标系上存在两点 \((x_1, y_1) (x_2, y_2)\)
每次可以使得 \(x_1 + 1, y + 1\) 或者 \(x_1 + 1, y_1 - 1\) 使得较靠左下角的点到达较靠右上角的点
只有一次使得 \(x_1 + 1\) 或者 \(y_1 + 1\) 的机会

\(sol\)

首先可以给方格黑白染色,发现两个颜色的点无法相互到达。如果起点和终点是不同色的,可以使用一次上下左右走的机会,使两个点位于处于同样的颜色。分别计算向上下左右走后的花费,取最小值。

考虑计算花费:
如果可以题目是上下左右走,那么两点的花费就是 \(abs(s1-s2)+abs(t1-t2)\)
那么斜着走也是同理,假设将方格旋转 \(45\) 度,求出旋转后的坐标,答案同样可以使用上面的公式。
其实std只需要一行

T2

\(des\)
存在长度为 \(l1 >= 3\) 的字符串 \(s1\),
向其后添加长度为 \(l2 = 2 或 3\) 的字符串 \(s2\)
求所有可能的 \(s2\)
相邻的 \(s2\) 不能相同
相同就很简单啦

\(sol\)

最重要的一点就是 \(s1\) 任意
这样的话对于一个位置 \(x\), 若用 \(x\) 当做某种 \(s2\) 的首字母
只需要满足该字符串的后面的字符串全部合法就可以了
因为前面的只要长度 \(>= 3\) 都可以当做某个 \(s1\)
从后往前 dp
\(f2\) 表示 \(i, i +1\) 可以计入答案
\(f3\) 表示 \(i, i +1, i + 2\) 可以计入答案
转移

猜你喜欢

转载自www.cnblogs.com/shandongs1/p/9691415.html