当前位置: 首页 > news >正文

CF2150D

挺有意思的计数题,希望下次可以做出来类似的题目。

一个显然的转化是把 \(p\) 数组转换成记录每个位置的人数的 \(f\) 数组,于是我们需要求每种情况下的 \(\sum f_i a_i\)

首先需要一些观察,初始 \(f\) 数组每个位置都是 1 ,放置 attraction 的操作相当于把连续的三个值 merge 起来,并且在左右补上 0 ,归纳一下就很容易发现 \(f\) 数组合法当且仅当:

  • \(\exists L,R \in [1,n] \ s.t. L \leq R, \forall i\in [L,R] f_i>0 ,\forall i \notin [L,R] f_i=0\)

  • \(\forall i \in (L,R) f_i \mod 2 =1\)

  • \(\sum f_i =n\)

假设我们枚举出 \(R-L+1=K\) ,一个很巧妙的想法是利用除了端点的 \(f_i\) 都是奇数这一点构造一个和 \(f\) 一一对应的 \(g\) 数组,其中

  • \(f_L=2g_L+x\)

  • \(f_R=2g_R+y\)

  • \(\forall i\in (L,R) f_i=2g_i+1\)

这样的好处是,此时的 \(g\) 数组只有 \(\sum 2g=n-(K-1)-x-y\) 的限制,这是我们会做的形式。

现在要求所有情况下的 \(\sum g_i a_i\) 再加上一些和 \(x,y\) 有关的东西。

当然可以推式子,但一个比较简单的想法是:我们先假设固定了左右端点,观察到中间这些位置本质相同,所以 \(E(g_i)=\frac{S}{2K}\)\(\sum g_i a_i=\sum E(g_i) a_i \times ways\)
\(ways\) 表示这 \(K\)\(g\) 的分配方案(插板法)。

于是对于左右端点不固定的情况,我们只需要算出来所有长度为 \(K\) 的子串和就可以很方便地处理,时间复杂度线性或者带一个 \(\log\)

http://www.jsqmd.com/news/7062/

相关文章:

  • AI元人文:致同行者书
  • tp5 基础nginx伪静态
  • 异或运算的一个小等式
  • AI元人文:“现实与价值”的生态——走向一种基于博弈与演化的协同智能
  • AI元人文:价值原语构想——迈向动态博弈的价值生态
  • 《多分支条件判断优化:switch-case 结构的技术价值分析》
  • US$78 HU66 Clamp SN-CP-JJ-12 Work on Volkswagen Serials for SEC-E9 Key Cutting Machine
  • US$78 HU64 Clamp Work on Benz SN-CP-JJ-11 for SEC-E9 Key Cutting Machine
  • 你妈的
  • 001
  • test6
  • US$188 Tubular Key Clamps for SEC-E9 Key Cutting Machine Tubular Key Cutting
  • 信奥大联赛周赛(提高组)#2515-S 赛后盘点
  • 虚拟机仅主机模式下使用ssh远程连接Linux(EHEL8)连接慢,需要等待30秒以上
  • VLC Player插件和自动激活
  • 第七天
  • logback.xml 常用配置详解 - Higurashi
  • 子结构判断
  • 使用 Go 进行验证码识别
  • 使用 Rust 进行验证码识别
  • 使用 Swift 进行验证码识别
  • Python错题集
  • 火狐浏览器新页覆盖旧页解决方法
  • msi主板,windows11,mbr转gpt后,提示0xc000000e1,无法进入系统
  • MAUI下热重载不生效
  • 在疼痛中锚定前路
  • US$13 BDM FRAME Adapter Only Adapter
  • 题解:AT_arc184_d [ARC184D] Erase Balls 2D
  • Chrome在Android上Speedometer性能翻倍的技术揭秘
  • 2025年10月训练记录