noip2016很多创新题,有幸搞到了TA的ak程序,来研究一下。
第一题: toy
可以看到 ^ 异或 有很大作用,当然这个题不卡。
对于环的问题可以从0开始,防止出界和负数可以统一 (ans+=n)%=n;
第二题: running
Ta爷写的链剖+lca+差分,不过depth[s]-(depth[lca]<<1)+n的标记我还是没看懂。
想了两天终于看懂了,TA真聪明。实际上deep【s】-deep【lca】是求从s到lca的距离,再减一个deep【lca】是因为深度-当前点深度是一个定值,再加n是为了防止出界。
要在考场上想这么深入准确真的非常不容易。这个题把树剖、lca、路径拆分很好的融合在了一起。
再xyx的启发下,打出了代码,能得95分,已经很满意了,
另外有一个教训:vector不要开得太大(<=300000)不然炸飞(T+M(不过noip好像空间放宽了))。
得到了树链剖分的新性质:从后向前更新,子节点总是比父先更新。
第三题: classroom
期望dp:
dp之所以能dp是因为对于每个相同的结果的方案都有最优的一个解。
此题的结果相同是指在第几个位置,它之前的课都完成了,即不管通过申请还是不申请,课都上了。
而最优的解是指在结果相同的一个位置中,利用遗传信息推出这个位置的遗传信息和最优解。
流程类似:
可以看出,蓝色的点箭头一种选择,红色的箭头是另一种选择,交汇处是一次决策,而这很好的涵盖了所有可能的情况。
所以dp是一个交汇,分流的过程。(插一下:而与此相对的网络流可以支持反悔,且有诸多dp没有的灵活性)
再由期望的和=和的期望性质可轻松推出dp方程
最后取最小值即可
第四题: problem
二维前缀和,若%k==1 就值为1,再加和。
============================2017.8.21=============================================
这一年noip考的十分灵活 虽然noip要追求高分,但对于某些题,还是打部分分比较好
第一题就是检验你的细致程度,注意多测几组数据,确保万无一失
第二题是麻烦题的典型,在考场上很难想出正解并ac,所以在思考无果的情况下骗分是最合适的
对于这个题,有一个结论,是可以化动态为静态的,正常的想法一定是扫一遍树,但路径是有好几条的,每个点都可能参与,
对于树上连续路径问题,我们必须想到差分,,当然差分并不能动态改变标记,那我们就必须找到这些变量和其他变量之间的关系。
注意到深度是在变的,所以这些标记可以和深度联系,就得出了深度+标记为定值 的推论。
实际上就是把一些时刻在变、看似需要重复更新的值用另一个变量与之运算,从而产生定值的方法应用到dfs上
第三题也比较麻烦,作为期望的第一次出现,它真的是挺难的,,但是只要知道期望的递推公式,这个题就又变成了板子题,
所以如果对期望有一个比入门更深一点的认识理解,就不会觉得难了
第四题是二维前缀和,注意在基础的dp、递推上的变形问题
第五题是单调队列,这种题也很麻烦,我们要利用最值的单调特点进行弹出,插入,,noip考单调队列还是比较麻烦的
第六题是状压dp,也是需要对状压dp有一些比较深入的理解
所以noip考察的能力主要是建立在对算法的理解,对某一算法的理解越深,得分就越有把握,对每一个算法每一个细节、每一步的原理都很清楚了,noip是不会难到做不出来的