今天wyc先生掳了四道题给我们... 本嘴巴AK选手吃枣药丸。
T1
题意简述:给出平面上n个点,两两连线,选尽量多的直线,使得所选直线中没有任何两条是平行的。n<=200。
sol:按斜率排序… 然而似乎有精度问题… 天师把eps设成(10^{-6})就狗带了。解决方法有两个,一是用分数算,二是用叉姬(?)。
T2
题意简述:合并果子。n堆果子,每次可以选k堆合到一起。其他条件相同,求最小代价。 n<=10000。
sol:我还是too naive。根本没有吸收到NOI2015 Day2 T1的经验。搞得我做过似的… k叉哈弗曼树,补零。当且仅当(n = p*(k-1)+1, p∈N^*)的时候才能像二叉那么做,也就是每次选满k个合到一起。现在感觉自己真是愚蠢,每次尽量吞k个,最后的尾巴一起处理,这样怎么可能对。当n不满足上面的式子的时候,在前面补0即可。
T3
题意简述:如图。
sol:简单树形DP。N<=1000的范围,设(f[i])表示传递完以i为根的子树需要的时间。贪心一下,在i的儿子中,(f)越大的子树要越先传递。这样,一个(O(n^2))的DP就出来了。
挖坑:那N<=100000要怎么做呢。设(f[i][0])表示从(i)传递到儿子的时间;……
T4
有一个长度未知的序列,满足如下的n个条件:至少有(c_i)个元素的值在区间([a_i,b_i])中。求序列的最短长度。
sol:第一眼:裸上差分约束。然后想想:先把区间按左端点-右端点排序,对于第(i)个条件,找到最大的(j)使得(a_j<=b_i),然后尽可能地把第(i)个条件里的数放进这个区间里去,把第(i+1)个条件到第(j)个条件的(c)值都减掉(c_i),重复如此。很像喷泉覆盖的贪心方法。暴力(O(n^2)),可以过。如果二分/离散化+线段树可以做到(O(NlogN))。