【题解】 Codeforces Round #706 题解

附(本场比赛各题 fst 率)

div2 A B C D E F
div1 A B C D E F
div2 0.0010 0.0035 0.0007 0.3090 0 0
div1 0 0.1962 0.0026 0 0 0

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

posted @ 2021-03-11 00:37  Imakf  阅读(176)  评论(4编辑  收藏  举报