csp-s模拟49

T1:
对于一个k,我们可以对于每一个\([i*k,(i+1)*k)\)的区间的max%k取max
考虑分块,对于每一个块处理对于所有k的答案,复杂度为调和级数

T2:
发现按y排序极难dp,所以按(x从小到大,y从小到大)排序
设计状态\(f[i][0/1]\)表示以第 i 个点为顶端接下来向左或向右的折线方案数
每次枚举[1,i)的所有点,若\(y_i>y_j\)\(f[i][0]+=f[j][1]\),否则\(f[j][1]+=f[i][0]\)
(实际上是枚举x的左右边界来dp的思路)
答案就是\(\sum (f[i][0]+f[i][1])\)

T3:
首先有一个结论:一定存在一种最优方案使得每次操作的区域是上一次的子集且颜色与上一次相反。
然后考虑每个点为中心染色,这时答案就是将同色边边权当作0, 异色边边权当作1后距离这个点最远的黑色点的距离
对所有答案取min

posted @ 2019-11-04 10:07  G_keng  阅读(116)  评论(0编辑  收藏  举报