当前位置: 首页 > 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.gsyq.cn/news/14784.html

相关文章:

  • AI元人文:致同行者书
  • US$78 HU64 Clamp Work on Benz SN-CP-JJ-11 for SEC-E9 Key Cutting Machine
  • US$188 Tubular Key Clamps for SEC-E9 Key Cutting Machine Tubular Key Cutting
  • 子结构判断
  • 使用 Go 进行验证码识别
  • 火狐浏览器新页覆盖旧页解决方法
  • msi主板,windows11,mbr转gpt后,提示0xc000000e1,无法进入系统
  • 在疼痛中锚定前路
  • US$13 BDM FRAME Adapter Only Adapter
  • 2025年10月训练记录
  • 《电路基础》第四章学习笔记
  • US$39 PowerBox for KTM JTAG for Hitachi
  • 详细介绍:OSWorld - 多模态智能体在真实计算机环境中的开放式任务基准
  • 【Groovy】变量和基本数据类型
  • 2026届模拟/射频IC设计方向保研经验分享
  • 2021 ICPC 沈阳 BEFHJLM(待补
  • 【Groovy】Groovy环境搭建
  • 2025年TAB拉链制造商权威推荐榜:创新设计与耐用品质口碑
  • Fluttercon EU 2025 :Let‘s go far with Flutter - 详解
  • io的异步处理io_uring,实现io_uring_tcp_server - 详解
  • P3977 [TJOI2015] 棋盘题解
  • 软工
  • 10.1考试T4(swap)题解
  • 如何在windows10的子系统(wsl)中安装php开发环境 - 教程
  • 网页端如何 打开百度高德腾讯地图导航
  • 完整教程:Coze源码分析-资源库-编辑插件-后端源码-IDL/API/应用服务层
  • 原来的OJ怎么没了?
  • 存在是必然的有机系统,好事多磨,心诚则灵
  • SQL 多表查询速查:JOIN、子查询一文全掌握 - 详解
  • 14.单臂路由(2025年9月29日) - 教程