CSP-S 模拟赛 29

CSP-S 模拟赛 29

T1

  • n18 显然是状压 dp。
  • 考虑设状态 dpi,j 表示状态为 i,最终的 aj 时的最大代价及方案数。转移是简单的。
  • 优化是观察到最终的 a(maxai,maxai+1)。那么这一维便可以用 0/1 来设。 于是时间复杂度 O(2nn).

T2

  • 对于网格图上统计问题,常见的想法是扫描线或者四个方向前缀和。

  • simple 的想法是从每个点向四个方向做前缀积,暴力乘上逆元来统计答案。然而我们发现 M 不一定是质数,也就是说逆元不一定存在。

  • 考虑到只有 2000 个卫星,那么容易想到离散化。于是我们离散化每一个卫星,维护到四个方向的前缀和,于是我们发现这样的维护是不需要逆元的,并且事实上被分割成了一个个的矩形。

  • 那么对于询问的每一个点,我们暴力计算它到所在矩形端点的距离计入答案即可。

T3

  • O(n2) 的暴力 Hash 是显然的。
  • 考虑优化。考虑对于两个串 a,b,长度分别为 p,q,那么 Hash 比对的时间为 O(min(p,q))
  • 得到部分分的启示,我们考虑预处理一部分东西。那么这个东西就很像根号分治。
  • 具体地,对于 min(p,q)n,我们预处理所有这样的二元字符串组 (a,b),那么这样的字符串组会有 n 个,复杂度最劣显然是长度全取到 n,复杂度为 O(nn),对于 min(p,q)n,直接暴力比对,复杂度 O(qn),于是总复杂度 O((n+q)n),能过。

T4

  • 抽象。
  • 考虑转化所求答案:求出对于一个节点 i,能够连到的离他最近的点编号与他的差。如果这个值是 p,那么表明连边是以 p 为周期进行的,于是答案就是 p
  • 我们猜想在一定情况下 ans=gcd(S)。显然只有当每个点 i=j+ski=jsk 时成立。
  • 对于 sin2,无论 i 在何处均有对应的 j。于是对于 sin2,当前答案 d=gcd(si)
  • 对于全部 si>n2 的情况,这些节点不会被任何点连到,于是考虑删去他们,同时改变 ns 的取值。
  • 对于 si>n2,d+sin 的,它仍然可以扩展到,因此新的 d=gcd(d,si)
  • 对于 si>n2,d+si>n 的,能跳的显然是前面的前 d 和后 nmodd 个点,更新 ns,并递归。
  • 时间复杂度 O(mlog2n)
posted @   长安19路  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示