「考试」省选28
T1炸了
别的没啥。
T1
\(K>n\)我就会死,窝阶乘只处理到了\(n\)。
其实挺简单的一个题。
就是要求关于某一段路径,其两端分别连接\(K\)条不相交路径的方案。
考虑一个点,他的儿子称为\(ch_i\)。
那么方案数的生成函数就是:
\[F(x)=\prod\limits_{i}(sz[ch_i]x+1)
\]
这个可以直接分治\(NTT\)来计算。
然后由于可以选这个路径端点。
那么最终这个点的方案数就是:
\[\sum\limits_{i}A_k^i[x^i]F(x)
\]
然后这样就可以统计没有祖先关系的路径的方案了。
考虑有祖先关系的。
无非是选定一个儿子。
然后令:\(F(x)=F(x)\frac{(n-sz[x])x+1}{sz[ch_i]x+1}\)
然后就直接竖式乘除暴力算就可以了。
对于一个节点来说,最多被计算的次数是\(\sqrt{n}\),其子树的大小总共只有\(\sqrt{n}\)种。
然后每个节点最多做\(\sqrt{n}\)次竖式乘除。
而每个节点的儿子数是\(num_i\)。
复杂度是:
\[O(\sum\limits_{i=1}^{n}num_i\sqrt{n}=O(n\sqrt{n})
\]
T2
\(n=2,3\)的时候贪心一下就行了。
\(n=4\)的时候写个\(dp\),表示当前已经积累的选择的左端点个数。
然后有两种选择。
当前点作为左端点或者右端点。
答案就是:\(dp[n][0]\)
然而这个是\(O(n^2)\)的。
考虑用贪心做这个东西。
一直选择当前点为左端点,如果当前的\(sum<0\)那么就直接选择之前最大的某一个位置来更新答案。
T3
\[ans=\left|f-\frac{s_r-s_l}{r-l}\right|=\left|\frac{fr-s_r+fl-s_l}{r-l}\right|
\]
那么把\(\{i,fs_i\}\)捏成点。
求得就是两点间的斜率绝对值的最小值。
按照第二维排一下序就\(OK\)。