sol
cuvelia
贪心的想, 我们一定是前面选一半后面选一半.
derivative
原式等价于求 \((1+zb)^n\) 中常数项, 其中 \(z^k=a\). 直接多项式快速幂每次将 \(z^k = a\) 带入即可.
interval
原问题等价于给定一个区间, 求区间的最小值是否整除区间的 \(\gcd\). 直接用倍增预处理然后二分即可.
string
考虑这个问题很像 border, 先建 AC 自动机. 考虑找出 trie 树上根到 T 的链和 fail 树上根到 S 的链的并上深度最大的节点. 在 trie 树上 dfs 然后每到一个点就在 fail 树上查一遍答案, \(\mathcal{O}(n\log^2n)\).
two
发现 \(f(x)\) 是平方级别增长的, 直接暴力枚举询问左右的点在堆里弹出即可.
walk
考虑图中度数是奇数的节点的个数.
-
为 0 : 存在一个点被所有环经过.
-
为 2 : 存在一个度数为奇数的点被所有环经过
-
否则 : 答案为 0
而没有度数是奇数的节点的图, 可以发现如果存在一个点被所有环经过, 那么度数最大的点一定被所有环经过.
walking
考虑枚举文本串的每一位, 考虑这一位能匹配到模式串的哪一位, 然后利用以前的数据更新即可.