CF 232 题解

今天来一场远古场愉悦一下身心

现实:已经自闭了

感觉远古场都是 AB 力度比较大,但是后面的题难度上不去。。

A

首先发现 \(K_n\) 的三元环个数是 \(\binom n 3\),我们先找到最大的 \(n\) 满足 \(\binom n 3 \leq m\),在题目限制内一定存在这样的 \(n\)

剩下的怎么做呢?我们可以建个新点,发现如果新点连向 \(x\) 个完全图上的点就会带来 \(\binom x 2\) 个三元环。

可以轻松证明一定能用不超过 \(100\) 个点表示出来。

首先 \(\binom n 2\) 又叫做三角形数,发现任何自然数都是最多三个三角形数的和(根据费马多边形数定理),算一下发现 \(\binom {97} 3 > 10^5\),所以一定能留下来三个点用。

B

\(c_i\) 表示第 \(i\) 列黑色的个数,容易发现 \(c_i = c_{i+k} = c_{i+2k} \ldots\)

所以我们就把 \(m\) 缩成了和 \(n\) 同阶的一个数,接下来 \(O(n^4)\) dp 即可:\(f_{i,j}\) 考虑了前 \(i\) 列,用掉了 \(j\) 个数,转移枚举下一列填多少个数。

C

画图找规律:

发现这个图主题是一条链+若干条边,是将一个 \(D(n-1)\) 放在左边,\(D(n-2)\) 放在右边,连一下 \(1\) 和右边图的开头设这个边是 \(e_1\),左边图的结尾和右边图的开头设这个边是 \(e_2\)

首先发现后面的图的点想跑到前面必须走过 \(e_2\),前面的点到后面的点可以跳到 \(1\) 然后 \(e_1\),也可以跳到 \(|D(n-1)|\) 然后 \(e_2\)

我们可以递归处理:首先 \(n\) 最多只有 \(80\),一个朴素的暴力是考虑我们当前询问在第 \(n\) 层,点是 \(u,v\),记为 \(f(u,v,n)\),分类讨论一下:

  • \(u,v\) 都属于后面的图,直接递归到 \(D(n-2)\) 做就行了。
  • \(u,v\) 一个属于前面,一个属于后面。那么 \(u\) 可以选择先到达 \(1\) 再走 \(e_1\) 到达右边图然后转化为右边的子问题,或者是先到达 \(|D(n-1)|\)\(e_2\) 到达右边的图。
  • \(u,v\) 都属于前面,这里不只能直接递归!可以让他们都跑到 \(|D(n-1)|+1\) 汇合,所以也要枚举一下哪个去 \(1\) 哪个去 \(D(n-1)\)

这样一次能分出来四五层时间直接爆掉了,所以我们要考虑优化。

我当时写了个记忆化(肯定只对 \(u=1\)\(v=n\) 记忆化),然后 T 飞了,不知道为啥。

我们考虑分出的叉大多数是有一个点是 \(1\) 或者 \(|D(i)|\) 的情况,我们可以考虑预处理每个点在每层对应的点距离 \(1\)\(|D(i)|\) 的情况。也是分类讨论一下:

  • \(u\) 在右边:到达 \(|D(i)|\) 直接递归,到达 \(1\) 要先到 \(|D(i)|+1\) 然后走 \(e_1\)
  • \(u\) 在左边:到达 \(1\) 可以枚举是直接走到 \(1\) 还是先走到 \(|D(i)|\) 然后依次走 \(e_2,e_1\) 到达,到达 \(n\) 需要预处理 \(D(i)\)\(1 \to |D(i)|\) 的最短路径 \(d_i\) ,就变成一个查询如何到 \(|D(i)|+1\) 的问题了。先枚举左边到达 \(1\) 还是 \(|D(i)|\) 走对应的边一步走过去,然后花费 \(d_i\) 走到 \(|D(n)|\)

D

两个区间合法等价于差分后的区间相等。

不能相交相当于限制了区间开头可以选取的区间。

相等相当于限制了两个后缀的 \(\text{lcp}\)。后缀数组+二维数点即可。

E

我们来考虑分治:每次取中间的一条线,考虑所有经过这条线的路径,在一个分治过程中我们只考虑跨过这条线的所有询问,只需要预处理 \(f_{i,j,k}\) 表示点 \((i,j)\) 能否到达线上第 \(k\) 个点(只往右往下),类似地 \(g_{i,j,k}\) 表示点 \((i,j)\) 能否到达线上第 \(k\) 个点(只往左往上),对于一组询问 \((x_1,y_1,x_2,y_2)\) 相当于是要判断是否存在一个 \(k\) 满足 \(f_{i,j,k} \text{and} g_{i,j,k} = 1\)。直接分治是 \(O(q \log n + n^3 \log n)\),发现那个预处理可以使用 bitset 优化,时间复杂度优化到 \(O(q \log n + \frac{n^3}{\omega} \log n)\)

posted @ 2020-09-22 20:57  RainAir  阅读(69)  评论(0编辑  收藏  举报