A. Circle Line
- 考虑环上的最短距离。
B. New Problem
- \(n\) 个串建后缀自动机。
- 找的时候bfs一下即可。
C. Learning Languages
- 并查集维护可以沟通的人。
- 注意会0种语言的人必然要学习。
D. Set of Points
- 构造类似于\(y = \frac{1}{x}\) 的两条曲线即可。
E. Game
- 本质其实就是个Nim博弈。
- 若先手胜,要找出第一步的可行解,即判断\[sg\ xor\ a_i \le a_i\]
D. Google Code Jam
By the Google Code Jam rules the time penalty is the time when the last correct solution was submitted.
- 对于probFail=0的题目,如果要解决的话,必然是放在probFail前面。
- 对于probFail=1的题目,显然不会去浪费时间。
- 剩下的就是0<probFail<1的题目之间的相对顺序了,考虑两道题目\(i,j\)的相对顺序,因为得分不会相互影响,只需要考虑罚时即可。
- \[(t_i+t_j)(1-p_j)+t_i(1-p_i)p_j<(t_j+t_i)(1-p_i)+t_j(1-p_j)p_i \\ \frac{t_ip_i}{1-p_i} < \frac{t_jp_j}{1-p_j}\]
- 根据上述不等式对题目排序,\(dp(i,j)\)表示前\(i\)道题目花费\(j\)时间的最优值。
E. Binary Tree on Plane
- 除了根节点外,其余节点均有1个父节点,那么就可以构出一张二分图:左边表示父节点,右边表示儿子节点,跑一遍最小费用流即可。最大流需要等于\(n-1\)。