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

Anti-Proxy Attendance 题解

题目传送门:CF1924F

还是第一次见这种势能题。
先把交互库的回答转成 \(0,1\) 表示答案是否在这个区间中。
首先把题目转化一下,对每个位置 \(i\) 维护一个 01\(S_i\) 表示:如果 \(i\) 是答案,那么当前交互库的每个回答是否是真话。即如果当前询问 \([l,r]\) 交互库的回答是 1 就往 \(S_i (i\in [l,r])\) 的末尾插入 1,在 \(S_j (j \in [1,l) \cup (r,n])\) 的末尾插入 0
那么如果某个 \(S_i\) 的末尾出现连续 \(3\) 个一样的数他就不可能是答案了。
显然对于每个 \(S_i\) 我们只需要维护他是否已经死了以及他的最后两位。
考虑给每个串附一个势能,一个局面的势能为所有串的势能之和。那么对于已经死了的串势能就是 \(0\);由于对称性,0011 的势能应该是一样的,不妨设势能为 \(1\);同样的,0110 的势能也是一样的,假设为 \(x\)(目前还不确定)。
那么初始局面的势能 \(E_{begin}\) 最多是 \(nx\),有解的必要不充分条件为最终局面的势能 \(E_{end}\in [2,2x]\)
不妨列一下对于不同种类的串,在末尾加一个 01 之后势能的变化:(\(E\) 代表原势能,\(E_0\) 代表加 0 之后的势能,\(E_1\) 同理)

00 01 10 11
\(E_0\) \(0\) \(x\) \(1\) \(x\)
\(E_1\) \(x\) \(1\) \(x\) \(0\)
\(\frac{E_0+E_1}{E}\) \(x\) \(\frac{x+1}{x}\) \(\frac{x+1}{x}\) \(x\)

我们希望每次询问之后势能可以稳定减少从而保证操作次数,那么有两种基本想法:每次稳定减少一个值或者每次乘上一个值。前者不太可能,我们考虑后者。
那么首先我们需要让任意串的 \(\frac{E_0+E_1}{E}\) 相同,否则交互库可以尝试尽可能地构造大的那种串,即 \(x=\frac{x+1}{x}\) 解得 \(x=\frac{1+\sqrt{5}}{2}\)
此时由于每个串都满足 \(\frac{E_0+E_1}{E}=x\),那么整个局面也必然满足 \(\frac{E_0+E_1}{E}=x\),下面的 \(E_0,E_1,E\) 均指整个局面的,设 \(E'\) 为加入一个字符后局面的势能。
因为 \(E_0+E_1=xE\),交互库肯定希望 \(E'\) 尽可能大所以他的回答会让 \(E'=\max(E_0,E_1)\ge \frac{x}{2} E\),也就是说我们每次至多让势能变成原来的 \(\frac{x}{2}\)
所以当 \(E_0\)\(E_1\) 足够接近,那么我们每次就能让 \(E'\approx \frac{x}{2} E\)
也就达到了理论最优操作次数 \(\log_{\frac{2}{x}}(E_{begin})-\log_{\frac{2}{x}}(E_{end})\)

我们现在考虑如何选择每次询问的区间能使得 \(E_0\)\(E_1\) 足够接近。
注意到对于那些已经死了的位置势能不再变化可以不去管他,设 \(\Delta E_i\) 表示选择前缀 \(i\) 进行询问,\(E_0-E_1\) 的值,\(\Delta E_{\emptyset}\) 则表示询问空集(即询问的前缀不包含任何没死的位置,虽然可能不存在这样的前缀,但这并不影响我们之后的分析),显然 \(\Delta E_n=-\Delta E_{\emptyset}\),因为每个串的势能都取反了。
考虑 \(i\) 变成 \(i-1\) 的时候,最多只有一个串的 \(E_0-E_1\) 发生了变化/取反,所以 \(|\Delta E_i - \Delta E_{i-1}|\)\(O(1)\) 的。
如果 \(E_n=0\) 那么我们直接询问整个串即可,否则由于 \(\Delta E_n=-\Delta E_{\emptyset}\),函数图像必过 \(x\) 轴,又因为相邻两点的变化是 \(O(1)\) 的,所以我一定可以找到一个 \(i\) 使得 \(\Delta E_i=O(1)\),也即询问前缀 \([1,i]\) 就满足我们的需求。

最后我们再进一步分析一下初始的势能 \(E_{begin}\)
设第一次询问的区间为 \(A\),第二次询问的区间为 \(B\),设 \(a\) 为同时属于 \(A,B\) 的位置个数加上同时不属于 \(A,B\) 的位置个数,\(b\) 为属于 \(A\) 但不属于 \(B\) 的位置个数加上属于 \(B\) 但不属于 \(A\) 的位置个数。那么如果第一次和第二次的回答相同,初始势能为 \(a+xb\),否则初始势能为 \(b+ax\),交互库会选择其中大的那一个,而由于 \(x>1,\max(a,b) \ge \lceil \frac{n}{2} \rceil\) 故初始势能必定 \(\ge \lceil \frac{n}{2} \rceil (1+x)\)。我们分别询问 \([1,n]\)\([1,\lfloor \frac{n}{2} \rfloor]\) 即可达到这个下界。

我们最终的最坏操作次数大约是 \(\log_{\frac{2}{x}} n+C\),其中 \(C\) 是一个小常数,但是由于 \(\frac{4}{1+\sqrt{5}}\approx 1.236\),而 \(\log_{1.236} N=54\) 远小于 \(\log_{1.116} N = 104\),所以是随便过的。

http://www.wxhsa.cn/company.asp?id=3655

相关文章:

  • 【2024-2025第二学期】助教工作总结
  • 开始每小时记录日程
  • 5【鸿蒙/OpenHarmony/NDK】使用Node-API进行异步任务开发
  • 控制器指令
  • 题解:AT_abc421_c [ABC421C] Alternated
  • MySQL数据库:SQL数据类型
  • Ubuntu 安装
  • 幼等数论
  • 搭建rocketmq的三主三从遇到的坑
  • 深入解析:轻松Linux-9.进程间通信
  • 2025.9.14——1黄1绿
  • Ubuntu 中改图片大小
  • Day01
  • 认识眼图和眼图的参数
  • 【芯片设计-信号完整性 SI 学习 1.2 -- loopback 回环测试】 - 实践
  • 【科研绘图系列】R语言绘制地图和散点图 - 指南
  • Java NIO 学习小记
  • 扩展欧几里得算法求乘法逆元
  • redis实现缓存3-封装redis工具类
  • 高阻态
  • 鸿蒙应用开发从入门到实战(四):ArkTS 语言概述
  • 命令模式的深度解析:从标准实现到TPL Dataflow高性能架构
  • JavaWeb
  • 读书笔记:为什么数据在磁盘上的存放顺序如此重要?
  • Rcc_APBPeriphClockCmd()
  • 故障处理:ORA-19809: limit exceeded for recovery files
  • ORA-01555系列:二、ORA-01555的场景分析与解决方案
  • PySimpleGUI常用控件
  • 25.09.14 与其感慨路难行,不如马上出发
  • GCC工具链应用学习笔记