iefnah06

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Delegation

二分答案,在递归时考虑保留儿子里尽可能长的一条路径,这个可以继续二分。

https://ideone.com/q2mbJR

Equilateral Triangles

对于每个等边三角形,考虑在它的“左上角”计数(如果不存在的话可以通过多次旋转得到)。

考虑三个点 \(A,B,C\) 形成的等边三角形。把 \(A(a_0,a_1)\) 作为左上角,枚举 \((x,y)=(b_0-a_0,b_1-a_1)\:(0<x \le y)\),那么 \(C\) 可以确定为 \((b_0+(x+y)/2,b_1-(x+y)/2)\)

枚举 \(a_0,x,y\),用 std::bitset 优化即可,复杂度 \(O(N^4)\)

此外,还可以枚举 \(A\)\(B\) 所在的对角线,然后注意到每次移动 \(A\) 一步时对应的 \((B,C)\) 对几乎没有改变,就可以 \(O(N^3)\) 了。

\(O(N^3)\)https://ideone.com/FMbx6k

\(O(N^4)\)https://ideone.com/VRPnGq

Help Yourself

经典的第二类斯特林数应用。

\(f(k)\) 所有线段集合内选取一个大小为 \(k\) 的连通块子集的方案数,那么答案为

\[\sum_{k=0}^{K} f(k)k!S(K,k) \]

用线段树优化一下 DP。

https://ideone.com/4s6npw

posted on 2020-04-20 12:01  iefnah06  阅读(284)  评论(0)    收藏  举报