2/13考试总结

时间安排

7:30–7:50 看题,T1数据结构,T2dp,T3 dp 。
7:50–8:30 T1,考虑询问可分为两部分,向上和向下,向上部分可以倍增,考虑向下怎么做,考虑能不能直接离线维护倍增,发现不太好做。
8:30–10:00 T3,可以求出通项公式,那么问题变成对于一个关于链长的函数 f(len) 求和。想了一会发现可以点分治做。写完发现常数比较大。
10:00–11:00 T2,暴力。对于 m=1 答案唯一。考虑怎么 dp 。发现假设一个数字串后,不太会求其最大匹配数,假设原串删除了一个位置,不太会求其可以作为最大匹配的数字串,而且即使求出来也面临一个去重的问题。
11:00–12:00 T1,发现一个瓶颈在于从上到下时不止有一条链,难以维护倍增,突然想到可以链剖分,对每条链预处理倍增数组,不过这样要处理很多信息,写完发现常数巨大,没调出来。

回顾反思

T1:
一道人均 AC 题,我只拿了 3 分。
对于部分分,我在想到链上的倍增做法后没能立马想到链剖分,说明我对链剖分作用和性质不够熟悉。重、长链剖分可将树剖成链,于是任何链上的做法都可以此套到树上,注意不同链中间的转移就行了。
对于正解,发现这个颜色的转化可以用类似链表的关系维护,进一步的可以用并查集维护。比赛时有类似的想法,不过当时更倾向于将当前链上所有点的转化关系处理出来,而题解则是直接把询问看做虚点,原树的点看做转移,于是更加简洁可做。
另外一点是,这道题我其实写了 13 分,但是由于题目本身预处理开了一个倍增,部分分又开了一个倍增,加上本身数据范围比较大,于是直接 MLE 了,而整场比赛我没注意到这点,这是不应该的。

T2:
可惜的是没有拿到基础的 dp 分数。
比赛的时候一直纠结于得到了一个 A 如何得 B ,或者得到一个 B 如何求 A ,觉得很不可做于是就没有往下想了。但是实际上,暴力设状态 dpi,j,k 表示当前考虑到 i ,答案为 j ,最优答案为 k ,的方案数,按位对 A 和 B 相应位置的数的相同关系分讨,其贡献的改变是可知的。于是就可做了。进一步的,发现转移几乎只影响 k-j ,不需要知道 j,k 具体多少,于是可以改变状态 dpi,d ,令 d=k-j 就变为 n^2 了。

T3:
比较好的一点是,利用通项公式转移为了一个简单的树上路径问题;
不好的一点是,没有注意到这个式子本身的特殊性,机械套用点分治的一般方法,常数还写大了,导致 T 了一档分数。
仔细观察就可发现,套用的点分治压根没有用到点分治的任何性质,完全可以在普通的原树上 dfs 一遍求得答案。
遇到问题还是要多想想有什么特殊性,不要遇到经典的模型就套用。
另外,关于减小常数的问题:当 n 比较大时,链式前向星存边比 vector 快很多;对于点分治,学习一下常数较小的写法。

T1是签到题,T3在知道通项公式后也很容易,T2 dp 设准状态后推导和优化也比较简单,T1,T3的AC和T2普通 dp 的60+高分都不算太难。理想分数是 260+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值