好不容易又遇见了一次Code+,好容易又没有拿到衣服。
实在是太菜了啊……
彩蛋题
整个机房集思广益,一起AK……
具体是什么就不赘述了,如果想知道的话去看gmh77的博客。
T1
很显然直接dfs,优先往字典序小的点走。
我做的是hard难度,所以当时没有做这题。于是没有代码。
T2
想到了一个相对于题解来说比较复杂的做法,在这里就不细说了。
讲题解做法。先放两个结论:
- 如果不看编号,那两只蚂蚁相撞之后反弹和相撞后穿过是没有分别的。太显然不证明。
- 如果看编号,那么一定存在一个分界点,在西边的蚂蚁从西边离开,在东边的蚂蚁从东边离开。证明可以考虑在进行的过程中,每次能够先离开的蚂蚁肯定是边上的蚂蚁。
根据结论1,可以知道最终多少个点往西边,多少个点往东边;再根据结论2,于是就可以求出分界点在哪里。
根据结论1,可以知道最终从西边离开的点离开的时间分别是什么时候;再根据结论2,可以给分界点西边的蚂蚁按照相对顺序分配相应的时间。
于是这题就做完了。
同样这题没有代码。
T3
比赛时手玩出了一个倒推的方法:
可以视作从全 0 0 0的序列开始,每次找到最前面的是 0 0 0的位置 i i i, a i a_i ai变为 i i i, a 1.. i − 1 a_{1..i-1} a1..i−1减一。
记最后一个不为 0 0 0的位置为 n n n,于是一直这样暴力做到操作次数为 n + k n+k n+k为止。
这样的暴力有了 35 35 35分。
比赛之后GMH、DYP等大佬表示他们几乎都切了这题。
考虑从后往前将整个序列构造出来。先二分 n n n。
很显然, a n = n a_n=n an=n
如果 n > 2 n>2 n>2,那么就有 a n − 1 = n − 2 a_{n-1}=n-2 an−1=n−2
能不能这样找到些什么规律呢?
考虑对于 a i a_i ai,它要被操作多少次。假设此时 a i + 1.. n a_{i+1..n} ai+1..n都已经决定了,已经知道了它们要操作多少次,记它们一共要操作 c c c次。
设 a i a_i ai要操作 x x x次,显然有 a i + c − i x = 0 a_i+c-ix=0 ai+c−ix=0,所以 a i + c ≡ 0 ( m o d i ) a_i+c\equiv 0 \pmod i ai+c≡0(modi)
可以看到,如果 i ∣ c i|c i∣c,那么 a i a_i a