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)\)。