模拟赛x+1

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

正解是二分角度 然后对于每个时间 都处理出合法区间 看是否有交




D:记忆碎片

原文地址:https://www.cnblogs.com/2004-08-20/p/14144697.html