5.21模拟赛总结
赛时历程
AM7:00来到一机房开始比赛,小困。
通读题面,感觉T1最可做,想T1,大困,已经快八点,遂厕所洗脸。
想到一个\(n^2logn\)的做法,考虑把gcd相同的区间都保存在一个vector里然后一起考虑。
一开始很天真,以为直接将贡献\(2^{len-1}\)分给vector的每个区间,树状数组区间加就行,九点搞完发现假了。
然后稍微想了想要解决区间冲突的问题,所以考虑划分,不知道怎么解决冲突,总不能暴力,那就破坏了我好不容易处理的gcd区间。
划分第一波,又假了。
此时已经十点,先去搞T3的20分,全排列还是好搞的。
十点四十再次回到T1,想到可以二分查找到nxt,pre,找到每个点左右第一个不相交的左右点,然后把区间左和区间右的方案给乘法原理一波,区间左和区间右的方案可以用递推来搞。十一点二十终于实现了,过了小样例,但是发现大样例除了前几个位置剩下的都不对。
无奈,调不出来了。
赛后发现
1 T3看错题,它并没有直接给出拓扑关系,需要dfs,而我直接把输入的u当作v的父亲。。遂挂成5分。。
2 T1,T2一分没有。
3 又去搞T1,发现如果只是按照双关键字排序,那么只有考虑nxt的时候可以使得找到一个nxt之后后边的区间都严格不相交于枚举到的区间,而pre中以l作为第一关键字,r可能参差不齐,所以pre就求错了,方案也会跟着求错。需要两遍sort,更改关键字(交换l,r),然后进行两次针对每个区间的二分查找,然后把不相交的区间前的方案和区间后的方案累计到这个区间的id上,最后再统计才行。
技术总结
好像赛后发现里就写的是技术总结,而现在一道正解都没有搞出来,所以能够总结的关于题目做法的东西也就是上边的。
那这里就写写”反思“吧。
1这次比赛的前段时间不够清醒,生物钟还没调整过来,经过几天的出汗运动,感到精力比先前确实好了,但是早上早起还是容易困,考虑提早入睡来调整。
2 这次的T1失分比较遗憾,T3失分比较sb,因为T1的\(n^2logn\) 是50分的,已经不算低了,但是因为写假做法浪费了时间(实际上整场比赛写了三个假做法,只是最后一个非常接近正确做法),所以最后没有时间调,感觉这样自己完成一个中档部分分还是有些作用的,这个部分分代码比std正解都长,希望我的码力和思考能力能多靠这样的实践来得到提升;T3这个读错题也是,而且T3也有一个比较显然的状压可以拿到40分,前边如果节省了时间,相信这个还是可做的。
3 T2并没有来得及做任何部分分,感到无处下手,因为定义比较多,对我来说也比较新颖。
4 打的不好的主要原因还是时间少了,前边发懵和写假做法浪费了太多时间,其实应该多想想再写。
5 这次基本没写注释完成了代码(虽然也没得什么分数),T1也演草了不短的时间,我想如果这次我写了注释也只能是把假做法全写上去,虽然没什么区别,但是确实更浪费时间了,有些思路可以在纸上映射,还有一点是,绞尽脑汁的思考以及自己处理复杂的细节,我想更利于对题目印象的深刻理解,这点继续下去。