比赛时间安排
7.30-7.40
t1 n<=10,全排列一下跳叶子结点的顺序暴力搞
t2 题意感觉好复杂,看看,好像还可写,暴力挺简单的
t3 暴力枚举一下A的排列,然后看哪个换之后的字典序最小吗?
7.40-8.10
t1暴力写完,码量不小,80行了都,自闭了
8.10-8.20
t2暴力写完
8.20-8.30
做了个核酸
8.30-8.40
t4暴力写完
8.40-9.00
仔细想了一下,觉得t3难道贪心能过吗,A每次排成从小到大的,然后B交换的时候,从第一个开始,能往前就往前,这样肯定对B是最优的,如果A最开始交换某两个数的位置,那么对于B,如果能交换,他肯定交换,如果不能,这样交换过之后反而对B更优了,于是就写了这个上去,虽然感觉非常不对,但是好像自己把自己说服了,拍了没问题!(震惊)
9.00-11.00
中间稍微瞌睡了一会,然后想t1,发现题目让求最大的最小,那么就是二分呗,每次枚举答案,把大于答案的边断掉,然后看最后是否联通。写完之后发现答案不对,好自闭啊明明感觉没啥问题,又细细想了,发现自己暴力都写错了!题目要求每条边不能被经过两次,但是像我的暴力写法,是没判的,于是我在最后更新答案之前,先判了一下是不是合法。
暴力算是改对了,但是二分的判定就不能看单纯的连通块了,因为即使联通也可能,没法走。
然后再想,这个过程其实是每次找一个点进去,一直向下走,走哪个无所谓,只要是深度增大就行,到最下面的时候返回,把之前跳过的所有叶子都遍历,然后进下一个子树内
难道是判断以每个节点为根的子树是否相同??好像真的是!
但是很快又举出反例了,发现某一个子树内联通了,但是也不行,可能路线不对。总是有反例,比较难描述。
于是先改回原来的二分骗分吧,看t2了(已经查出原来的错了)
11.00-11.45
觉得现在手上只有30也太难受了吧,于是想写t2的n^2,要推式子,那就按照之前的方法,考虑每个区间的贡献,本来想按照原来的dp套路,由小推到大,但是发现失败了,后来不知道怎么回事,突然想到固定右端点,左端点移动,把样例列出来找规律,发现真的能搞成!
激动的写下来,调了一点小bug,过了,对拍没问题,非常快乐
11.50-12.00
想着没啥事了,检查一下吧,然候就把t3又拍了一下,发现暴力错了,原来之前造数据有问题,没进暴力里,导致排不出来,于是我就自闭了啊,想改,但是发现思想都错了,没办法,直接把暴力删了(笑哭)
赛后总结反思
- 暴力分能拿的都拿了(还是想吐槽码量太大了哭)
- 又犯了审题不清的问题,改代码的时候心态还是有点崩的,觉得浪费了好多时间
- 最后时间有点紧张了,要把整体的时间再提前一下
- 针对一道题,如果不是想死磕出来,30分钟足矣,t1就是用了太长时间了,但是收益太小
- t2是原题!!!!!!!!!!!!!!!!!!!真的只有一点点点点的熟悉,但是完全想不起来了(主要是处理mex的时候觉得好熟悉)
与正解的差距
T1
t1正解是记录了一个二元组,(起点到i的距离,终点到i的距离),这样把两棵子树合并的时候也能维护相应路径,并不是只找联通块,加上合并的时候用的是归并排序,又加深了一下对这个的印象,就是几段本身有序的东西,开多个指针,只向每一段的第一个,分别比较元素,选一个最小的或者最大的,扔进答案里,然后指针后移,就ok了
T2
学到的思想是在统计答案的时候,可以通过新增了多少个贡献来想,当然,还会nlogn求mex了
T3
是一个非常巧妙的贪心,既然有两个人,那么我们就需要把这两个人割裂开来做,A让字典序最小,且要防止B的交换,那么肯定要搞个限制,把不互质的数连边,这样,只要是联通的就都不能交换位置,然后贪心地选择小的放。但是还有B的操作,于是在A已经限制好的基础上,B会把大的,且能选的都放到前面,还是用到了归并。