省选模拟80

A. 数字

  dp套dp经典题?

  考虑枚举一个$x \&y$的值,如何检验这个值是否可能被拼出来。

  那么简单的想法就是暴力dp,只要表示出与边界的大小关系就可以转移。

  那么考虑同一位上dp只有16种不同的状态,给这16种状态的dp值压在一起就可以得到数的数量。

  复杂度看起来很高,但是跑不满。

 

B. 跳蚤

  发现值域很小,然后就开始想一些奇怪的东西了。

  考虑对于$t$较大的点,如果暴力维护,那么每个点最多跳根号次就无法再造成贡献。

  对于较小的点,由于种类不会很多,所以可以对于每个开数据结构暴力维护。

  自然的想法是维护线段树或者树状数组,然后发现log在根号外面了,目测会tle(实测没事)。

  然后发现较大的修改次数多,查询次数少,所以分块维护,然后调块长可以做到log在根号里面。

  然后发现较小的实际上也可以,查询次数多,修改次数少,那么同样可以分块维护。

  这样就做到了不带log的复杂度(实测最慢)。

 

C. 棋盘

  一个显然的想法是状压dp,然后发现复杂度死了。

  然后考虑用生成函数来优化。

  那么只要求出来整个dp数组的生成函数即可,考虑代入点值然后插值出系数求解。

  自然的想法就是代入单位根,然后IDFT求出系数。

  然后只要求出来点值即可,发现点值的转移式可以用矩阵来优化。

  然后就没了。

posted @ 2020-04-25 22:07  tdcp  阅读(131)  评论(0)    收藏  举报