zoukankan      html  css  js  c++  java
  • 省选模拟80 题解

    A. 数字

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

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

    所以可以 dp 套 dp。

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

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

    B. 跳蚤

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

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

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

    直接暴力复杂度就是 $O(n^{1.5} *log )$的。

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

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

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

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

    C. 棋盘

    暴力 dp 做法显然。

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

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

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

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

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

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

  • 相关阅读:
    Go语言基础之切片
    Go语言基础之map
    Go语言基础之函数
    Go语言基础之指针
    Go语言基础之结构体
    Redis缓存失效策略
    redis 的过期策略都有哪些?内存淘汰机制都有哪些?
    关于redis的主从、哨兵、集群
    Redis的 RDB和 AOF持久化的区别
    为什么做分布式使用 Redis
  • 原文地址:https://www.cnblogs.com/skyh/p/12775556.html
Copyright © 2011-2022 走看看