系列trick - bitmask
系列trick - bitmask
拆位
主体思想:位之间不影响,把每一位拆开来考虑贡献,转化成非常容易考虑的 0/1。
首先要看出来位之间不影响,当题目涉及二进制运算时应当首先注意的就是这一点。
例题有一堆,这里拿最近做的一个举例子
CF1327F:这题给你若干个限制 \((l,r,x)\),表示 \([l,r]\) 的区间AND和必须是 \(x\);求满足条件长度为 \(n\),并且每个数都 \(<2^k\) 的序列数。
显然位独立,然后相当于限制区间都是 \(1\) 或者区间至少有一个是 \(0\)。随便 dp 一下就可以计数了。然后把每一位的答案乘起来,就是最后的答案了。
例2:整数 求逆序对的神秘方法
从高到低来考虑,如果当前的位就能比较出结果(相当于一个01序列求逆序对, 开个cnt记一下即可),就计入答案;当前位相同的用分治的技巧分成两部分解决。复杂度是值域的 \(\log\),乘以 \(n\) 。
它看起来很傻逼,但是由于它拆位,支持更多操作(详见分治那篇里的题)
位运算优化(点少的)图操作
点少:指 \(2^n\times ...\) 可以通过。
主体思想:用位运算加速图的操作,以优化掉复杂度 卡常
讲道理,其实纸面复杂度没有被优化,只是把一些耗时间的操作交给 cpu 来搞了,比如把一个 \(O(n)\) 的操作用位运算做掉,变成 “\(O(1)\)”
有啥用呢?\(n=24,25\) 的时候,\(2^n\) 的复杂度多一个 \(n\) 都是过不去的。
比如,可以把每个点的出边压成一个集合,然后每次把当前的状态跟它或以下,就可以实现搜索中的 “扩展”。
例1 判断强连通,\(n\le 24\) :这个题 的 \(60\) 分,\(O(2^n n)\) 的做法。
例2 例1的100分 (这个还涉及到筛法,见下一个trick)
位筛
主体思想:筛法,定义域为二进制压缩的集合
这类问题时间复杂度通常会有保证:每个集合只会被筛一次,复杂度是 \(O(2^n)\)
系列trick - bitmask的更多相关文章
- 系列trick - 随机
系列trick - 随机 不断更新中,欢迎来提供idea 随机的字符串 出现次数 \(\ge 2\) 的子串期望长度是 \(\log n\) 两个随机串的期望LCP,LCSuf,LCSub长度是 \( ...
- 系列trick - 建图
对偶图 主体思想:平面图的割,等价于对偶图的路 例题:[BeiJing2006]狼抓兔子 网上有114514篇题解,这里不赘述 点变边 主体思想:点带点权,而要在点上实现一些在边上的问题,比如最小割点 ...
- 解读ASP.NET 5 & MVC6系列(8):Session与Caching
在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模 ...
- Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...
- Java多线程系列--“JUC集合”08之 LinkedBlockingQueue
概要 本章介绍JUC包中的LinkedBlockingQueue.内容包括:LinkedBlockingQueue介绍LinkedBlockingQueue原理和数据结构LinkedBlockingQ ...
- Java多线程系列--“JUC集合”09之 LinkedBlockingDeque
概要 本章介绍JUC包中的LinkedBlockingDeque.内容包括:LinkedBlockingDeque介绍LinkedBlockingDeque原理和数据结构LinkedBlockingD ...
- Java多线程系列--“JUC集合”10之 ConcurrentLinkedQueue
概要 本章对Java.util.concurrent包中的ConcurrentHashMap类进行详细的介绍.内容包括:ConcurrentLinkedQueue介绍ConcurrentLinkedQ ...
- Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例)
这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数006, image,影像处理(像素图)
<zw版·Halcon-delphi系列原创教程> Halcon分类函数006, image,影像处理(像素图) 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“* ...
随机推荐
- [leetcode]79.Search Word 回溯法
/** * Given a 2D board and a word, find if the word exists in the grid. The word can be constructed ...
- 什么是ResultSet
概述: 在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表. ResultSet对象维护了一个游标,指向当前的数据行.开始的时候这个游标指向的是第一行. 注意: 如果调用了Re ...
- Linux top命令在生产环境的妙用
top linux下的任务管理器 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来 ...
- JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录
新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...
- 出现org.apache.ibatis.binding.BindingException异常
出现绑定式异常 查看target文件夹里面再mapper中,发现运行时缺少xml文件 解决办法 1.将xml文件复制到target中Mapper文件夹下面. 2.将xml放到resource目录下 3 ...
- 风炫安全web安全学习第三十四节课 文件包含漏洞防御
风炫安全web安全学习第三十四节课 文件包含漏洞防御 文件包含防御 在功能设计上不要把文件包含的对应文件放到前台去操作 过滤各种../,https://, http:// 配置php.ini文件 al ...
- Java NIO 文件通道 FileChannel 用法
FileChannel 提供了一种通过通道来访问文件的方式,它可以通过带参数 position(int) 方法定位到文件的任意位置开始进行操作,还能够将文件映射到直接内存,提高大文件的访问效率.本文将 ...
- 新蜂商城的mybatis plus版本,添加了秒杀专区、优惠卷领取以及后台搜索功能
本项目是在newbee-mall项目的基础上改造而来,将orm层由mybatis替换为mybatis-plus,添加了秒杀功能.优惠劵功能以及后台搜索功能,喜欢的话麻烦给我个star 后台管理模块添加 ...
- HDU6375双端队列
要点分析: 1.本题可以使用C++STL中的deque双端队列来方便解决(底层是一个双向的链表) 2.值得注意的是N的上限为150000,所以直接开这么大的空间会超内存,可以配合map一起使用 关于双 ...
- spring boot gateway 过滤器的执行顺序
前言 学习官方文档,发现对于过滤器有分为三类 默认过滤器 自定义过滤 全局过滤器 于是就有一个疑问,关于这些过滤器的访问顺序是怎样的,今天就以一个demo来进行测试 准备阶段 过滤器工厂类 以此为模板 ...