A - Split it!

检查 \(k=0\) 或者长 \(k\) 的前缀和长 \(k\) 的后缀的反串是否相同。

注意如果 \(2k=n\) 要特判。

复杂度 \(O(n+k)\)。

B - Max and Mex

模拟一下过程就会发现:

要么 \(\max\) 和 \(\operatorname{max}\) 永远不会变,要么就会一直加 \(1\)。

所以答案只有可能是 \(n,n+1,n+k\) 中的一个。

注意特判 \(k=0\)。

复杂度 \(O(n)\)。

C - Diamond Miner

把所有点翻折到正半轴。

在最优方案中连线不能交叉,因为三角形不等式。

所以直接排序贪心连接。

复杂度 \(O(n \log n)\)。

D - Let's Go Hiking

设最长连续单调段长度为 \(a\),个数为 \(b\)。

只有 \(b=2\),且这两段有交,且 \(a\) 为奇数的时候有解。

复杂度 \(O(n)\)。

E - Garden of the Sun

搁三列填满一次,发现这样不会有环,然后只需要把这些列连起来就行了。

复杂度 \(O(nm)\)。

F - BFS Trees

考虑计算 \(f(i,j)\),如果 \(i,j\) 之间最短路有多条则答案为 \(0\)。

否则可以暴力检查每一条边是否能在树中,并为每一个不在最短路上的点安排一个父亲结点即可。

复杂度 \(O(n^2m)\)。

G - Qingshan and Daniel

找到会出完牌的一队 A,另一队伍为 B,对于 A 队,它的每一次出牌会造成右侧第一个 B 队的人出牌。

直接记录一下当前遍历到的 A 队的它们会让多少个后面的 B 队的人出牌 \(cnt\)。

如果下一个是 A 队,则 \(cnt += a_i\)。

如果下一个是 B 队,则让这个人出 \(\min(a_i,cnt)\) 张牌,并让 \(cnt\) 减小。

复杂度 \(O(n+m)\)。

H - Squares

这题窝不会,丢个官方题解:https://codeforces.com/blog/entry/88533

验题人提供一个和官方题解不同的做法。

把树建出来,发现你无论怎么走到 end,都必须经过一个点的父亲。

预处理每个点到父亲的最短路,预处理跳过一棵子树的最短路和落点。

查询可以直接树上差分出来。

复杂度 \(O((n+q)\log n)\)。