$Div.2$
CF1140C Playlist
- 将元素按 $b$ 从大到小排序,然后从后往前依次加入,每加入一个元素时它的 $b$ 都是当前最小的.
- 此时需要钦定选择这个元素作为最小的 $b$ ,并在已有元素中选出 $k-1$ 个 $t$ 值最大的.
- 这个东西用个堆维护一下当前前 $k-1$ 大的 $t$ 值就好了.
CF1140D Minimum Triangulation
肯定会有一个很直观的想法:全部都以 $1$ 为一个顶点,然后 $(1,2,3),(1,3,4) \dots (1,n-1,n)$ 这样来剖.
这样做的确是正确的,即权值一定是最小的.为什么呢?
考虑若有 $x<y$ ,那么把方案 $(1,n,x),(n,x,y)$ 换成 $(1,n,y),(1,x,y)$ ,总权值会减小.
于是可以直接将 $x$ 换到 $n-1$ ,然后将 $(1,n-1,n)$ 这个三角形直接割掉,对剩下的 $n-1$ 边形继续做上述操作.
这样做的话,所有的方案就一定是 $(1,2,3),(1,3,4) \dots (1,n-1,n)$ 这样的形式了.
另一个做法是 $O(n^3)$ 的区间 $dp$ ?
CF1140E Palindrome-less Arrays
- 任意位置都不能出现长度 $\geq 3$ 的奇回文串,其实也就等价于不出现长度为 $3$ 的回文串.
- 也就是说总有 $a_i\not=a_{i+2}$ .这样显然可以奇偶分开算,将两个序列各自的合法方案数目乘起来.
- 把奇(偶)数位置拿出来,就是要求相邻两个位置都不同的方案数.
- 把连续的一段 $-1$ 看成一块,考虑每一块 $(a,-1,-1,\dots,-1,b)$ 怎么算方案数.首尾可能会出现没有 $a,b$ 的情况,枚举第一个/最后一个元素,算中间的就可以了(其实这部分细节挺多的?).所以下面都假定 $a,b$ 存在.
- 每块的方案数只与 $-1$ 的个数 $x$ 以及 $a,b$ 是否相等有关.记 $f(x)$ 表示 $a\not =b$ 时的方案数, $g(x)$ 表示相等时.
- 若 $x$ 为奇,枚举最中间的元素,就有:
$g(x)=g(x/2)^2+(k-1)f(x/2)^2,f(x)=2f(x/2)g(x/2) + (k-2)f(x/2)^2$ . - 若 $x$ 为偶,枚举第一个元素即可将 $x$ 变为奇.
$g(x)=(k-1)f(x-1),f(x)=g(x-1)+(k-2)f(x-1)$ . - 边界显然有 $f(0)=1,g(0)=0$ .
1 |
|
CF1140F Extending Set of Points
- 可以发现它的 $Extend$ 操作就是将每三个点加一个点补成一个矩形,直到每个可补的位置都有点为止.这里的三个点必须要有两个点的连线是平行于坐标轴的.
- 给每个 $x,y$ 坐标都建一个节点,加入 $(x,y)$ 就将对应的两个节点连起来,容易发现每个连通分量的贡献为不同的 $x$ 坐标个数乘上不同的 $y$ 坐标个数,此时的答案就是每个连通分量的贡献之和.
- 这个东西用个并查集维护,插入点很简单,删除点似乎不太好做?此时可以想到线段树分治,用线段树给每个点影响的时间区间 $(l,r)$ 打上对应的标记就好了.
- 打好标记,算答案的时候,递归到一个节点时,就让上面的所有标记生效,退出时再撤销就好了.
- 注意这里有撤销操作,需要避免路径压缩的使用.用按秩合并优化就可以了.
1 |
|