A:接力比赛
跑两遍背包就可以了
B:树上竞技
对于点考虑很麻烦 所以考虑边的贡献
假定边一侧有S个点 另一侧有n-S个点
假定S>=n-S
那么最终集合点一定在n-S这边 此时这条边的贡献即为S
所以可以列出式子
(sumlimits_{i=1}^{m-1} inom{S}{i} inom{n-S}{m-i} * min(i,m-i))
含有min 不容易计算 所以把式子拆开
(sumlimits_{i=1}^{frac{m-1}{2}} inom{S}{i} inom{n-S}{m-i} * i + sumlimits_{i=1}^{frac{m-1}{2}} inom{S}{m-i} inom{n-S}{i} * i + [m)%(2=0] * inom{S}{frac{m}{2}} * inom{n-S}{frac{m}{2}} * frac{m}{2})
后面的东西显然特判掉可以直接处理
考虑前面的东西怎么计算
首先前面的东西可以化成(S*sumlimits_{i=1}^{frac{m-1}{2}} inom{S-1}{i-1} inom{n-S}{m-i})
令(G(S) = sumlimits_{i=1}^{frac{m-1}{2}} inom{S-1}{i-1} inom{n-S}{m-i})
不妨用常量k代替(frac{m}{2})
则(G(S) = sumlimits_{i=1}^{k} inom{S-1}{i-1} inom{n-S}{m-i})
考虑能否由(G(i))快速转移到(G(i+1))
考虑(G(i))的数学意义 表示在一共n-1个数中 选择m-1个数 其中前S-1个中最多选k个
(G(i))向(G(i+1))转移 其中所不同的部分只有i这一个位置 在(G(i))中 前i-1个选择k-1个 然后选中i 是合法的
但是在(G(i+1))中 则不存在这样的情况
所以直接减去这样的情况就可以了 O(n) 递推把所有G预处理出来 然后一遍dfs就可以了
C:虚构推理
枚举时刻 二分最大的角度的位置 然后取max
这里的时刻要枚举到0.1s
正解是二分角度 然后对于每个时间 都处理出合法区间 看是否有交