目前只有 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 mod 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) 的点的个数,直接求强连通分量即可。