题解 Codeforces LATOKEN Round 1 (Div. 1 + Div. 2) (CF1534)

目前只有 A ~ F1 的题解,请谨慎食用。

A Colour the Flag

对网格黑白染色,判断和给定条件是否冲突,冲突就反色再判一下。

B Histogram Ugliness

发现格子给轮廓的贡献是 \(0,1,2\) 条边,那么把贡献是 \(2\) 的格子都删掉即可。

C Little Alawn's Puzzle

发现答案就是 \(2^{环个数}\) 直接找环即可。

D Lost Tree

钦定 \(1\) 为根,查询,于是得到每个点的深度 \(dep_i\)

发现如果询问一个点,找和它距离为 \(1\) 的,比较 \(dep\) 的大小就可以找到这个点的父亲和儿子。

那么我们可以每隔一层问一下,于是把点分为深度奇数和偶数的。显然深度为奇数的点集与深度为偶数的点集不可能同时超过 \(\frac{n}{2}\) ,于是选小的集合问就可以了。

E Lost Array

upd:这个恶心的做法假了,大家别看!

首先发现每个数出现次数必须是奇数,那么 \(n\) 为奇数 \(K\) 为偶数就一定不合法,直接输出 \(-1\) 即可。

如果 \(n\)\(K\) 的倍数,那么把每 \(K\) 个数分成一段,直接做即可。

考虑前面每 \(K\) 个数分成一段,拿出来问。记剩下的为剩余部分 \(w,w=n \bmod K\)

  • \(w\) 为偶数:

发现可以这样问:在前面某一组拿出 \(K-\frac{w}{2}\) 个,先把这些和前 \(\frac{w}{2}\) 个放一起问,再和后 \(\frac{w}{2}\) 个放一起问。

  • \(w\) 为奇数:

如果 \(w=1\) ,需要特殊考虑,我们要把前面拿出一整段,这样就有 \(K+1\) 个数了。然后我们输出一个 \(K*K\) 的矩阵,第 \(i\) 行是 \(1,2,3,\cdots,K+1\) 去掉 \(i\) 。再把前面没被使用的分段做。

如果 \(w>1\) ,还是分成两个部分 \(x,y\)\(x=\frac{w+1}{2},y=\frac{w-1}{2}\) 。由于 \(w\) 为奇数,那么 \(K\) 必为奇数,所以 \(K-w\) 一定是偶数。那么先把前面某段的 \(K-x\) 个数拿出来和 \(x\) 一起问,再把后面的 \(w\) 个数和前面问过两次的 \(\frac{K-w}{2}\) 个数和前面只问过一次的 \(\frac{K-w}{2}\) 个数拿出来问,最后再把所有问过两次的数问一遍。容易发现是对的,因为所有问过两次的数一共有 \(x+\frac{K-w}{2}+(K-x-\frac{K-w}{2})=K\) 个。

注意细节。

F1 Falling Sand (Easy Version)

考虑把一段连通的并起来,于是我们需要求的是缩点后入度为 \(0\) 的点的个数,直接求强连通分量即可。

posted @ 2021-06-14 12:05  kylin_xy  阅读(67)  评论(0编辑  收藏  举报