越到现在越感觉考试时间不够用了,大概是自己打了不少没用的东西吧。
清华 体验 营
Day 1
开场看到题觉得自己要爆0。
A题推式无果,尝试用状压DP打暴力,剪了一波枝,把复杂度压到
一看数据范围,第一个点n=20。
18我都能过啊……
C题连题意都没理解透,想要照着题目意思做,发现m又大了2。
然后发现B好像有分可做时太开心了,多看了一眼AC就开始码B。
复杂度,500的时候是1亿多一点,开O2应该没问题吧?
然后200行(第一部分)一直打到太阳西斜。
往上一交,发现500的点T了?
回来测了一下,发现300开始就有点虚了,但300以前的点应该是可以过的……
前一个点:r=10。
一种恐惧感从心底蔓延开来。
出题人刚好卡掉了我的每一个做法,而且没有给我的任何做法留下一条后路。
后来告诉自己要冷静,最终连蒙带猜搞出了A题的规律(其实是真正的题面……),也坚持把B的另一个部分打完了。
只是B的另一部分没有调出来,290行->15分。
其实C题求的情况是很简单的,先求再求=的情况题目给了20分。
B题已经爆破,复杂度算错了。
场上查询联通性我先二分再进可持久化并查集查询会多出一个log。
直接像暴力求LCA那样扫一遍的事情我为什么要在外层套个二分再去扫……
场后发现B题要用到一个性质,但是我在做B题的时候完全没有想过去想一想性质,导致我的路线和题解的路线完全偏离。
Day 2
打完B暴力跑回肝A,看到链的情况发现每组(点,边)的贡献是独立的。链上直接线段树就好(后来才发现可以树状数组)
既然要搬到树上那肯定要些什么迁移一下。
点,点分治?
4秒开-O2好像没什么问题吧?
好像可以,于是快乐370行。
三个小时后一交,T。
心底里的恐惧又开始扩散开来。
本机测了一下极限数据,跑了6.8s。
手动重新开-O2编译了一遍,6.8s。
看看代码,发现线段树可以改成树状数组。
重测。
5.3s。
主席树能改不?怎么好像不能改的样子……(降智警告)
反复观察了几遍代码,但并不能发现其他可以优化的地方。
我好像,又被卡掉了啊……
愣了一会,冷静分析一波,马上跑回去把C暴力打了。
打完离考试结束还剩6分钟。
跑回去看B有没有哪里可以优化,到考试结束了还没发觉。
发现翻车后心态有刻意调整,但远不如自然状态。
很多策略大概只是在机械地执行。
最后6分钟我可以干的事情其实很多,但是如果我选择回去卡A的话就意味着自己放弃了这6分钟。
在思考的时候经常忘记刚开始的结果。
A题我是从 树是一条链 和 点的两个权值相等的情况 思考过来的,但是我后面暴力收场时却没有想起这36分。
370行基本把啥都写了,代码也比较模块化,理论上来说就算只够打一个接口的时间,也可以拿到链的22分。主席树是能改的,把主席树改成树状数组就能A了
Day 2S
码力竞赛 学习题。
开场两个点处理小细节直接花掉大半的时间,打第三个点时急得都快疯了。(第三个点分值是前两个点的和)
本来以为自己挂惨了,后面发现第四个点太神导致一大波人被卡得只剩100。
十分开心,然后……
发现自己第三个点被爆破了……
小结
O(nlogn)单次查询LCA,主席树模拟树状数组的背后,究竟是
不要老是以恶意的心态去揣测出题人,有些时候并不是出题人要卡你的做法,而是你的奇怪想法出题人想都没想过。可持久化并查集+二分查询联通性扫描线上dijkstra对于整棵树的贡献使用点分治
想到一个做法之后最好再想想能不能简单一点,很多时候不仅仅是代码难度的问题。
发现代码被卡掉的时候不要老是想着卡一卡,很多时候原理上的优化效果会好很多。
前两场比赛打出了“我码力其实没那么差”的感觉。
第三场告诉我,实际上我只是拼接板子熟练一点而已。
感觉从NOIP二试开始我的考试流程就变成了开场送温暖,分数全靠后期赶。
UPD:
CCF冬令营T2答案格式错误,-60s。本地SPJ过了就是过了
Mark: 出题人并不会善意地在下发测试文件中帮你卡掉低级错误。