考场上做第一题做了(4)小时(T)飞了,结果发现被(GCD)卡了,只能再回来(看着题解)补题了;
(A)
(ans=frac{sum[r] - sum[l-1]}{r - l + 1}), 能够发现是个斜率模型,可以维护一个下凸壳,在凸壳上二分答案就好了;
(B)
设第j轮到了i号点时的概率(P_{ij});
[P_{i0} = frac{d_i}{2m};
]
对于与(i)相连的点(u)
[P_{i1} = sum_u{frac{d_u}{2md_u}} = frac{d_i}{2m}
]
所以无论过了多少轮到这一点概率都是一样的
直接(O(n))计算答案即可;
(C)
[F_i = max(F_i, {sum_i} xor {sum_l} + sum_l) (0 <= l <= i)
]
分位考虑,发现当(sum_i)的第j位为(1)是,(l)无论如何取这一位都是(1),
反之只有(sum_l)第j位为(1)时才有贡献(1<<(j + 1)),否则无贡献;
这时可以贪心地预处理(dp[i])为(sum[l])包含i状态下最小的(l),选取(1,0)的时候用(dp)贪心即可;
(D)
待补
(E)
直接写一个(gen)打表即可;
(F)
容易想到状压(DP),但要分(m)的奇偶性讨论;
当(m)为奇数时,不需要考虑对坐的情况,可以设(dp(i,j,0/1,0/1)),表示当前考虑到第(i)位为状态(j)时第一位选或不选,当前这一位选或不选;
当(m)为偶数时,发现当前及对面是只能取一个的,所以可以将这两个位置并在一起成为一个位置,这样转移就十分好想了,
设(dp(i,j,0/2,0/2)),选到第(i)组状态为(j)以及第一组和当前组的状态;
转移都是枚举当前这一位选什么;
(G)
十分巧妙的网络流建模,因为数字各不相同能够发现可以取到(LIS_a + LIS_b)这个上界;
所以问题转化为删去一些数使得(a或b)的(LIS)改变;
对于(dp)值为1的向源点连边,(dp)值为(LIS)的向汇点连边,这样问题就是割去图中的一些点使得(S)到(T)不连通;
经典问题,拆点最小割即可;