AtCoder Beginner Contest 220
D FG operation
Description
Solution
设 表示计算了前 i 个数,结果为 的方案数,初始条件为 ,然后根据题意转移即可。
Code
1 |
|
E Distance on Large Perfect Binary Tree
Description
题目链接
统计满二叉树上距离为 D 的点对数。
Solution
按深度从小达到考虑 (深度范围为 [1, n]),为防止重复计算,只考虑经过选定点 ,且不经过其父亲节点的长度为 D 的路径(类似点分治路径统计)。
深度为 的满二叉树节点数为 。
对每个节点 ,以 为端点,且另一端在 子树中的路径数为 ,所以计入答案的点对数为 。
否则设路径的一段长度为 , 则另一端长度为 ,需要满足 且 ,所以 。对应的计入答案的点对数为
Code
1 |
|
F Distance Sums 2
Description
Solution
二次扫描与换根 DP 模板题。
首先选择一个节点为根节点进行树形 DP,设 表示 到子树中所有节点的距离和,状态转移方程为 。
dfs 换根时,设 表示节点 到其它所有节点的距离和。对于 , 分为两个部分,一个是到子树节点的距离和 ,另一个是经过 到其它节点的距离和。可以先从 中减去 到 的子树节点的距离和,即,在加上 乘以其它节点的数目 即为答案。最终结果为 。
时间复杂度 。
Code Distance Sums 2
1 |
|
G Isosceles Trapezium
Description
题目链接
给定平面上 个点,每个点有一个点权,找出一个等腰梯形,使得点权和最大。
Solution
两条线段能构成等腰梯形当且仅当它们的中垂线相同,且延长后不重叠。
首先得出所有线段 (只考虑向一个方向连线),求出中点,两端点点权和,和对应的中垂线方程(可通过求出中垂线向量得到)。然后按照中垂线分类。
对于同一类中垂线,按中点分类,记录最大的端点点权和,排序后找到前 2 大的点权和即可。
为防止浮点误差,最好预先将坐标 * 2,并且用 的形式表示中垂线。此外 map
不是按照 value
排序的,求最大 value
不要用 map.rbegin()->second
。
时间复杂度 。
Code Isosceles Trapezium
1 |
|