时间安排
13:00–13:05 读题,T3感觉不可做。
13:05–13:25 T1,显然对于小数据,可以用set维护数字增减,然后暴力提升幂次。然后发现n<=5000根本跑不过。
13:25–13:40 T2,暴力,模拟即可。
13:40–14:20 T3,不晓得暴力怎么写。试图写个费用流,发现不好建图。感觉排列的各种情况对答案的影响很复杂,就弃了。
14:40–15:30 T1,值域小的时候,可以用桶。值域大的时候可以用hash。另外,一个想法是枚举2的幂,查询对应的前缀,依旧可以用hash维护。这样就有66分了。考虑怎么扩展到正解。容易发现,最终幂最多是最大幂+log,可以枚举,然后找对应的前后缀,值域过大怎么办?用hash mod乱搞应该就可以了。怎么寻找呢?不太会。
15:30–16:00 T2,看到组合数莫名想到多项式,似乎可以根据次数拉格朗日插值,发现次数有点大。发现每次变化的是一个分数,考虑能不能对这个分数拉差,好像也不太形。发现拉插在这道题没有优势。但是好像不用多项式就没法做。
16:00–16:30 T3,考虑怎么写暴力。或者怎么贪心。
16:30–17:30 考虑T1正解。T2多项式做法。没什么想法。
17:30–18:00 越想越寄。饿饿,困困,饭饭。
回顾&反思
T1:没考虑到分治。一直在想怎么找区间,但实际上套个分治就可以了。
T2:一个比较妙的转化是,将组合数考虑成路径,然后用多项式快速处理。不过这一块依旧是我不太会的地方,还没看太懂。
T3:一个很致命的一点是我没有考虑每个数字的贡献。考虑每个数字的贡献就变成了一个数字是所选区间最大值的方案问题了,可以组合计数解决。不过对于区间的贪心选择则又是一对性质推导,这一块还是有点犯难的。对于同学打表的水品感到难以置信。
本文记录了一场编程比赛中选手的时间安排及解题思路。针对T1、T2和T3三道题目,作者分享了从初步尝试到深入思考的过程,并对未解决问题进行了反思。涉及算法包括分治、多项式处理及组合计数。
170

被折叠的 条评论
为什么被折叠?



