【填算符】(log 值域的做法)

news/2025/1/11 20:45:17/文章来源:https://www.cnblogs.com/YuenYouth/p/18521629

比赛在这里呢

填算符

下发题解说的神马东西,赛时根本想不到

讲一个赛时想得到的 \(O(n\log 值域)\) 的思路,很好理解

我们处理出二进制下每一位上的 1 的最后一次出现的位置,将第 \(i\ (i\in[0,60])\) 位上的 1 最后一次出现的位置记作 \(pos_i\)

同时我们设 \(H=n-k-1\) 为总共有的 bitor 的操作数

有以下结论:由于 \(pos_i\)\(i\) 位上最后一个 1,所以一旦它后面放了一个 与,这一位上就是 0 了;若我们想要这一位为 1,必须至少满足从 \(pos_i\) 到最后的运算符全是 bitor

发现有以下情况:

  • \(n-pos_i>H\),即 \(pos_i\) 之后需要放的运算符的数量比 bitor 的总操作数多,也就是说在 \(pos_i\) 之后我一定需要放 bitand 操作,所以这种情况下这一位一定不对答案有贡献

  • \(n-pos_i<H\),也就是说我可以从 \(pos_i\) 的前一个位置开始到最后全放 bitor 操作,那么这样第 \(i\) 位上可以是 1,为了使值最大,所以第 \(i\) 位上一定要是 1,所以从第 \(pos_i\) 位到最后必须全是 bitor 操作,对于这种情况的 \(i\) 我们记为合法位

  • \(n-pos_i=H\),也就是说从第 \(pos_i\) 到最后的运算符可以全是 bitor 操作,但 \(pos_i\) 的前一位只能是 bitand
    所以我们特判从第 1 个位置到 \(pos_i\) 的前一位全放 bitand 能不能让到第 \(pos_i\) 个数时得到的值第 $\forall $ \(j 满足 [pos_j=pos_i]\) 位为 1,若能则该位也为合法位,否则不合法

对于所有合法位的 \(pos\) 取最小值设为 \(end\),因为已经保证 \(end\) 到最后的预算符全是 bitor,此时有一下两种可能,而我们想尽量构成第二种可能:

  1. \(end\) 的前一位预算符也为 bitor,这样我们一定能达到答案最大了,想使答案最优直接让从 \(end-2\) 开始的 \(k\) 个运算符为 bitor 就好了

  2. \(end\) 的前一位在某些情况为 bitand 也是可以使答案最大的,所以我们判断能不能让 \(end\) 的前一位为 bitand 同样使答案最大;
    发现可以的条件相当于从第 \(end-1\) 个数到最前面用仅剩的 bitor 操作得到一个答案,使得这个答案第 $\forall $ \(i 满足 [pos_i=end]\) 位为 1,若能满足条件则第 \(end-1\) 个操作符为 bitand

满足条件的判断又和上述的第三个情况判断一致了,相当于以 \(end-1\) 为下界,再做一次求 \(min(合法的\ pos)\),实质上是不断的递归。

所以一个递归 \(dfs(end, H)\) 表示下界为 \(end\),还剩 \(H\)bitor 操作,判断能不能得到我想要的答案:

若不能则直接从第 \(end-2\) 开始的 \(k-res\) 个运算符全为 bitand 就是答案(\(res\) 为在之前的递归中已经确定的 bitand 的个数)

若能则第 \(end-1\) 个位置可以为 bitand,并设 \(end'=min(这一层中合法的\ pos)\)继续递归 \(dfs(end',H-(end-end'))\) 判断第 \(end'-1\) 个位置能不能为 bitand

形式化如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825617.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF573D Bear and Cavalry

原题链接 比较简单的 \(\text{dp}\) 题。 看见题目的 \(\sum w_ih_i\) 式子,很容易想到排序不等式,所以我们先对 \(w,h\) 排序,然后分情况讨论。若 \(w_i,h_i\) 对应的编号不相等,肯定是把它们配对。若 \(w_i,h_i\) 对应的编号相等,考虑这样的连法:若是这种情况也不合法,…

多校 A 层冲刺 NOIP2024 模拟赛 17

难度 ★★★★☆多校A层冲刺NOIP2024模拟赛17 T1 网格 签到题 注意到 \(+\) 与 \(\times\) 由于优先级其实是分开的,所以可以考虑每到达一个 \(+\) 计算一次贡献(乘上一个组合数),然后将前置贡献重新赋值为方案数,DP 只需考虑连续 \(\times\) 段即可。 时间复杂度 \(O(nm)…

图吧垃圾佬理解的早期国产芯片历史(龙芯中科和同行的恩怨解析)

额……老铁们,我图吧老捡国产芯片垃圾的了。最近有人问咱关于国产芯片发展故事的事,所以咱简单答疑了一下顺带做了个记录的整理,简单看下情况。 水友: 就是我有个同学,已经魔怔了,现在已经在同学群里说天玑吊打国产芯片了 前几天说的是吊打9950x… 垃圾佬: 吊打国产芯片…

Apple Safari 18 - macOS 专属浏览器 (独立安装包下载)

Apple Safari 18 - macOS 专属浏览器 (独立安装包下载)Apple Safari 18 - macOS 专属浏览器 (独立安装包下载) 适用于 macOS Sonoma 和 macOS Ventura 的 Safari 浏览器 18 请访问原文链接:https://sysin.org/blog/apple-safari-18/ 查看最新版。原创作品,转载请保留出处。 作…

记录一次大炮打蚊子的modbustcp通讯连接异常问题

一.问题描述 某种场景下,安装有Ubuntu22系统的设备A开机后,1-2min内设备E遥控器不能遥控设备A移动,之后恢复正常。 二.设备组网设备A和设备C之间使用modbustcp协议进行通讯。 三.首战 3.1 查看日志 放开该端口的modbus查询帧日志打印,发现整体的帧格式,发现返回了modbus数…

读数据工程之道:设计和构建健壮的数据系统25查询

查询1. 查询 1.1. 通过理解查询、建模和转换​,你会掌握将原始数据转化为下游利益相关者可用数据的工具 1.2. 被很多人熟知的SQL,这是最流行和通用的查询语言 1.3. 查询是数据工程、数据科学和数据分析的基础 1.4. 在了解数据转换的基本模式和技术之前,你需要了解什么是查询…

制作一个龙芯旧世界的 dotnet sdk docker 镜像

本文将和大家分享如何制作一个在龙芯旧世界上可跑的 dotnet sdk docker 镜像,以及我的踩坑过程以下是我的 dockerfile 文件,内容特别简单 FROM cr.loongnix.cn/library/debian:buster WORKDIR /root RUN apt-get update -y && \apt-get install -y --no-install-reco…

18-网络安全测评技术与标准

18.1 概况 1)概念 :指参照一定的标准规范要求,通过一系列的技术和管理方法,获取评估对象的网络安全状况信息,对其给出相应的网络安全情况综合判定。 网络安全测评对象通常包括信息系统的组成要素或信息系统自身。2)发展1983年,美国国防部颁布《可信计算机系统评估准则 T…

修改PE导入表注入DLL——实例图文教程——让你看的明明白白

其实通过修改PE导入表注入DLL的教程很多,本文也只是其中的沧海一粟而已,但既然写出来,自我感觉应该还是有一点自我的东西的,至少自认为做到了思路清晰,每步都有据可依,让看客应该能做到“看的明明白白”!本贴以《英雄无敌》1游戏程序为例子,向其添加一个DLL,调用其中的…

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统 视频讲解【第1季】10.第10章_其他SLAM系统-视频讲解【第1季】10.1.第10章_其他SLAM系统_RTABMAP算法【第1季】10.2.第10章_其他SLAM系统_VINS算法【第1季】10.3.第10章_其他SLAM系统_机器学习与SL第1季:第10章_其…

web安全作业(SQL注入1)

web安全作业(SQL注入) 理论作业 1.什么是盲注?盲注的类型? 2.报错注入常用的函数有哪些?请分别解释其用法? 3.时间盲注的payload构造方法?用到的函数及其用法? 4.DNS Log注入原理?前提条件及应用场景分别是什么? 1. 开发人员屏蔽了报错信息,导致攻击者无法通过报错信…