Processing math: 61%

省选模拟80 题解

A. 数字

如果枚举 x and y 的取值,可以进行一个简单的dp。

dpi,0/1,0/1,0/1,0/1 表示从高到低到第 i 位,最高的几位分别是否与 lx,rx,ly,ry 相同,然后这个 dp 数组的取值也只有0/1。

所以可以 dp 套 dp。

在考虑过高位之后,需要记录的信息是这 24 种状态分别的取值,所以写一个 224 的状压。

每次考虑 x y 的第 i 位取值为 0/1 ,分别进行转移即可。 

 

B. 跳蚤

部分分提示了一些做法,可以对于 ti 的大小进行根号分治。

对于长度较大的,跳的次数不会很多,可以暴力维护。

对于长度较小的,对于每种长度用一个数据结构维护。

直接暴力复杂度就是 O(n1.5log)的。

然后对于其中一种 ti 比较大可以直接用分块优化,这样可以把复杂度降到 O(nsqrt(nlog))

然后对于另外一种,不能优化的瓶颈主要在于下标出现负数并且绝对值太大,没办法分块。

但是需要注意随时只关注长度为 n 的连续段,所以可以把下标放在 mod 意义下考虑,这样就也可以分块优化了。

两种分块优化方法并不相同。

 

C. 棋盘

暴力 dp 做法显然。

因为 dp 的状态数实际上只有 2,3,7,所以可以考虑用矩阵、多项式来优化这个 dp。

其实就是给矩阵的每个位置都维护一个多项式。

其实暴力做就是 O(m log  * |S|^3)的,其中 |S| 表示状态数。

但是暴力的做法常数肯定大的飞起。

然而其实只需要最终的多项式,所以可以直接把单位根的 i 次方代入转移矩阵中的 x,这样最终求出的就是要求的点值。

然后暴力 IDFT 插值出 x^k 项系数即可。

posted @   skyh  阅读(124)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示