比赛时间安排
8.25-8.35
t1感觉和昨天的题怎么这么像呢!暴力都一模一样啊【笑哭】
t2就是n遍dfs?
t3感觉特判可以写一下,不会点双边双,直接并查集判联通吧
t4感觉一眼看上去是最小生成树,然后有一定的思路了
8.35-8.45
t1暴力,规定a<b<c,然后去枚举a,b,c,可能的六种组合
8.45-9.10
t2刚开始写了n遍dfs,以每一个点为根,去计算答案,但是样例都不对,于是我发现需要排序,那按照什么排序呢?能直接按照节点 的大小吗?我想了想貌似不可以,自己造出了一组数据,发现确实不能单纯按节点大小排序。然后就想到可以考虑整个子树的最大贡献,按照子树的节点权值和排序。然后写完之后发现样例都不对,推了一下样例发下确实也不能这样排,然后我就懵了,先放了
9.10-9.36
t3的暴力特判写了,也就是k=0的时候直接并查集合并,自己手造了几组样例,过了。然后发现森林也很简单,就也写了,然后因为试了一下,发现大样例里面没森林,我就直接交了
9.36-10.20
t4的暴力,二分这条边的长度可以是多少,然后每次做一遍最小生成树,看他是不是被选中了,越写越觉得没有自信,因为这复杂度是。。nmlognlogm,3000炸的死死的,试了一下样例,果然t掉了,想了想,加了一个剪枝,如果这条路是必经的,那么就直接1000000000,然后依然t,没办法,想不到优化了。(另外,发现t3的文件名打错了,赶紧去改)
10.20-10.30
把t3的代码又改成了直接按照权值排列,把样例水过去了,但是大样例依旧不过,先交了,能骗一分是一分
10.30-10.50
仔细画了t1的15%的数据,发现是是一堆以1为顶点的直角三角形,只需要把x那一行和y那一行的长度加起来想乘就行了,于是愉快的写完,然后测试了几组数据,没问题,交了
10.50-12.00
1个小时在写t1
顺着刚刚的思路,我想到把每个点看成一个定点,找到这一行的所有点的横坐标之和,以及这一列的所有点的纵坐标之和,(针对于枚举的当前点),然后加起来一乘就行了
于是我想,反正这一行总是这么多点,那我把他们针对于0的和求出来,然后加加减减就好啦!非常自激动,开始写,后来发现小样例都过不了,这才恍然大悟,在x左边和x右边是不一样的,一个需要加,一个需要减,于是我又lower_bound了一下,找到在x左右的数分别有多少个,依然不对。于是我又发现,夹在x和0之间的点的贡献得单独计算,所以我需要处理一个前缀和?!然后正写着我发现数组越界了。。。1e5*2e4。我人傻了,气愤地删掉所有代码,直接针对每个点暴力枚举与它同一行同一列的所有点,然后计算答案,拍了10分钟,没什么问题,交了
12.00-1.00
全身心投入t3。因为剩下的我已经无能为力了。该基环树这一档分了,思路很显然,找环,然后先把非环边切断,如果有环的话,就从大到小去枚举环的大小去切,但是由于忘了找环代码怎么写,花了很长时间,最后还错了!!不过这让我发现一个别的问题,就是我的并查集写错了,fx写成x 了,挽救了20分
赛后总结反思
- 基础知识掌握不牢靠,找环代码竟然忘了怎么写,今天就去复习!
- 这场把会写的暴力分都拿到了(甚至还骗了不少)
- 感觉t1的1小时有点浪费时间,虽然说真的在推正解,但是最后竟然被暴力水过去了?!还是应该先把能拿的分都拿了,拍一下才见分晓
与正解的差距
t1
其实正解是推式子,但是暴力水了,考场上想到了,但是好像是细节问题,写挂了
t3
思想和考场上一模一样!就差一个找环的代码o(╥﹏╥)o
t4
考场上想过先求最小生成树,再判断每条边的值,但是整合能力不够,代码觉得无法实现,而且没有想到分成两类边来考虑。正解分析了没加进去一条边,树边和非树边都会如何变化,然后找到规律。但是我这里的能力太弱了