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

知识学报:位运算(1)

不是题解不是教学!!!!!

9.24

洛谷 P4310

题目给定一个长度为 n 的数组,选取一个子序列,使子序列相邻的数之间的 AND 不为 0, 问子序列最长为多少。
很容易想到对于第 i 个数,可以找到之前子序列长度最大的一个和自己 AND 不为零的数,并把 i 的每个为 1 的位都更新为这个长度 + 1,dp 即可。第一次写的时候没有把所有的 1 都更新,挂了两发,检查后很快通过。

洛谷 P7970

题目给出一个矩阵左上角和右下角,给这个矩阵中 i AND j 不为 0 的格子涂黑,问矩阵内有多少个联通块。思考了半个小时,打了表看到一些规律,但基本没什么思路,然后看了题解。题解主要给出了一个关键信息:对于一个黑格 (x, y),两个格子 (x, y - 1) 和 (x - 1, y) 有且只有一个涂黑,y 不变同理。
证明如下:设 x 小于 y 且 x AND y 为 0,故 y - 1 = y - (lowbit(y) - 1) + lowbit(y),也就是把 y 的最后一位 1 后面的全部变为 1,那么 y - 1 一定有 lowbit(x) 位为 1。而 x - 1 = x - lowbit(x) + (lowbit(x) - 1),显然 lowbit(y) 位不受影响仍为 0。
同时观察打表结果,可以注意到联通块的个数是矩形上边和左边与打表结果相切的个数。那么就可以用数位 dp 去求,当一个数所有与 x OR (x - 1) 的 AND 为 0 时,也就是这个数与 x 和 x - 1 的 AND 都为 0,那么这是一个和上边相交的点,横向同理。
注意这道题目需要特判 0 的情况,以及数位 dp 时去判断这一位是否取 AND 为 0 时要注意 1 改为 long long,以及判断不是等于 1 而是非零。

http://www.hskmm.com/?act=detail&tid=16058

相关文章:

  • CentOS 7 下 Kubernetes 集群搭建与配置指南
  • 2024/9/24
  • Git 工作树 (worktree)、合并 (merge) 流程、拉取请求 (PR) 机制,以及基线分支概念
  • 【HD300I 】基于昇腾 310P 的全国产化智能计算模组
  • 《密码系统设计》第三周
  • 详细介绍:Cloudflare 推出 GenAI 安全工具,守护企业数据
  • 论小学教师转移矛盾的方法——以“小组连坐制”为例
  • 9.24
  • 编译器与链接器--通俗解释
  • WPF路由事件
  • VS2022 不支持 .NET Framework 4.0 的解决方法
  • 【Origin】数据分析后的图,提取到外部图表
  • P3747 [六省联考 2017] 相逢是问候
  • B1I、B1C、B2a双频北斗卫星定位芯片AT9850B-F7N-22
  • Wi-Fi技能——网络安全
  • idea打开properties文件中文乱码问题
  • 2025/9/22
  • 人机共生:AI如何重塑招聘全流程,赋能HR战略升级
  • hot100题简单题
  • Scanner 和if
  • python自动化操作PDF
  • 注意事项
  • 完整教程:【数据结构】 ArrayList深入解析
  • 产品经理如何借力项目管理软件,驾驭复杂项目并准时上线?
  • 公钥密码与可证安全概述
  • Python标准库enum模块实现枚举类
  • Filter过滤器
  • 程序员的旅行神器:用AI提示词工程解决选择困难症
  • 修改人大金仓V8数据库时间
  • BUUCTF-babyheap_0ctf_2017题解(含详细过程与思路分析)