二进制思维/状压/bitset
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
神奇的二进制(bitset部分操作解释)
(在计算机中,数都是二进制来存储的,所以二进制的一些运算要比普通的等价运算(+,-,*,/)更快,更简单,所以知道他们的技巧显得尤其重要!)异或运算:首先 异或(^) 表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为 1 相同则为 0 .该方法被广泛推广用来统计一个数的1的位数!所以二进制中 对应二进制位数进行异或操作时, 与0异或对应该二进制位数值不变, 与 1 异或原创 2017-06-21 13:31:27 · 1686 阅读 · 0 评论 -
牛客练习赛23 C 题 托米的位运算 【位运算的小处理】 水题
传送门 题意: 其实转化过来就是求给定的n个数中选择尽量多的数使得他们&起来最低位的1要尽量的高,.思路: 其实也很简单, 最重要的问题就是如何去掉高位的1的与影响.. .我们先将所有数按照他们的二进制分别放进有一的位置的, 然后对于同一个位置的那些数字, 在不考虑当前位置之前的位置的影响的情况下与出来的数字二进制只能有一个1也就是当前这个位置. 所以我们拿一个当前位置以及高位都是...原创 2018-07-29 19:28:37 · 259 阅读 · 0 评论 -
POJ ---- 1222 和 POJ --- 3279 【二进制思维+状态压缩】
POJ1222 题意: 1代表打开, 0关闭, 输出一种方式可以将整个矩阵都关闭. 思路: 我们首先要明白一个事实, 那就是如果第一行的操作确定了, 那么所有的操作就确定下来了, 只要他是可行的. 所以我们直接枚举所有可能, 然后模拟做 , 然后下一行的操作方式就是上一行的状态, 因为亮的必须关闭, 最后判断一下最后一行是不是全关上了就行啦, 注意一些小细节.然后这个一个字节就行啦, 所...原创 2017-06-21 13:37:57 · 566 阅读 · 0 评论 -
玲珑杯 Round 24 C 题 【思维好题!!! + bitset标记状态】
传送门 // 题意: 给你一个无向图,每次查询的时候给一堆二元组(xi,yi) 求图中有多少个点u与至少一个这次询问给出的二元组(xi,yi)满足dist(u,xi)<=yi,dist表示这两个点在图中的距离 如果不连通dist = inf// 思路: 我们考虑用压位进行优化, f[i][j] 表示的是这幅图中到达i点的距离 <= j 的所有点构成的bitset集合, 然后查询的时候就是把一堆原创 2018-01-23 19:53:12 · 365 阅读 · 0 评论 -
HDU 5094 Maze 【bfs + 状态压缩】
传送门 这道题就是HDU 1429 的加强版而已, 做过HDU1429的做这道题应该就会更有思路的多.// 题意: 给定一个n*m的矩阵, 问从(1, 1)走到(n, m) 的最少步数是多少, 不过在某些点到某些点它可能有墙或者门, 墙不能被通过, 门的话必须要有相应的钥匙才行. // 思路: 门只有10种, 很明显的处理方法就是很HDU1429一样, 用一个数的二进制位上时候有1来表示是否拥有原创 2018-01-22 23:13:28 · 327 阅读 · 0 评论 -
POJ - 2443 Set Operation 【思维 + bitset操作】 !!!bitset操作详解!!!
bitset详细讲解首先bitset&lt;10&gt;bit(6); 就可以直接把6转化成了相应的二进制了. 但是如果要输出. 必须先强制转化成int才能输出. 下标从0开始. 然后就是bitset之间的操作只能用bitset来判断, 比如说判断是否等于0. 那么应该先定义bitset&lt;10&gt;bit(0); 然后判 (注意优先级)(bitset[5] &amp; bitset[2...原创 2017-09-24 20:57:59 · 663 阅读 · 0 评论 -
CF contest 888 problem E 【思维 + 状压 + 中途相遇法(折半搜索)】
传送门 //这道题和LA 2965非常像,不过更简单一点, //题意就是从n个数中选取一些数使得他们加起来 % m 尽可能的大, 很容易有一种想法就是二进制枚举, 但是2^35次方非常大 , 所以我们需要用到中途相遇法, 即我们二进制枚举前一部分, 把所有可能的和存起来, 然后再二进制枚举后一部分, 对于后一部分每一个我们枚举出来的和, 在前面二分找出离和当前和相加最大并不超过m-1的数(原创 2017-11-26 00:16:24 · 407 阅读 · 0 评论 -
LA --- 2965 Jurassic Remains 数相同的大写字母 【思维 + 状态压缩枚举 + 中途相遇法(折半搜索)】
传送门 //题意 : 给你n个由大写字母组成的字符串, 从中选取尽量多的串使得选中的串中出现了的大写字母的出现次数都是偶数. 输出可以选的最大值和具体选的那些串. //思路 : 首先是思维转化, 我们发现一个大写字母出现了几次不重要, 出现的次数为奇数还是偶数才是比较重要的. 那么一个字母的状态无非就两种, 奇数或偶数, 那么我们就用二进制来表示, 1表示出现了奇数次, 0表示出现了偶数次,原创 2017-08-18 10:32:19 · 522 阅读 · 0 评论 -
HDU 6166 Senior Pan 【二进制分组最短路 】 好题
传送门 //题意: n个点m条边的有向图, 给出询问的k个点, 问这k个点中最短路径是多少. //思路: 有个最明显的思路就是加一个超级源点S和超级汇点T, 然后连接询问的那些点, 然后跑一遍最短路即可, 问题就是万一同时连接到了一个点, 那怎么算最短路了, 我们可以知道这些点可以分为两个集合, 一个是起点集合, 一个是终点集合, 而我们的目的就是把正确的点放在相应的集合中, 这样答案一定就可原创 2017-11-30 00:31:20 · 681 阅读 · 0 评论 -
POJ -- 2443 Set Operation 【 二进制压位 】
传送门 题意应该好懂, 就不说了. 思路:将每一个集合看成是一行,也成了一个10000 * 1000 的0、1矩阵,对于每个数来书,它所在的列的0、1分布情况也就是它所在集合的情况。但问题是现在一共有1000行,2^1000肯定不行,但考虑到一个int可以存32位(2^32),1000<32*32,所以可以开32个整数,每个整数的二进制的每一位代表每一行,这样就可以在q*32的可接受的时间复杂度原创 2017-07-22 00:20:01 · 782 阅读 · 0 评论 -
UVa --- 10464 Even Parity 偶数矩阵 【状态压缩 + 暴力枚举 + 思维】
传送门 //题意: 给你一个01矩阵, 问最少操作几次可以使得这个矩阵的任意一个元素的上下左右元素加起来是偶数. 操作是指可以将这个矩阵中的0变成1. 但是1不能变成0. //思路: 由于n最大只有15, 所以我们可以考虑用二进制状压枚举出第一行的状态, 然后依次判断下面的状态, 最后得出的那个矩阵和原先的矩阵比较一下, 看有进行了多少次操作. 取最小的那次即可, 如果不能继续走下去了, 记得及原创 2017-08-16 18:35:39 · 660 阅读 · 0 评论 -
2017 年广工大的程序设计决赛 E 题 --- 倒水 【二进制思维】
地址在此 就是一道思维题,通过分析题得知,每个瓶子可以装2^x这么多水,即这么多的水可以装在一个瓶子里,所以:每2^x个瓶子可以合成一个瓶子。 以样例13 5来说, 13=8+4+1. 也就是说13个瓶子可以合并成3个瓶子,但此时不满足“小于k个”条件,所以需要购买瓶子。 买1个,14=8+4+2,没有什么卵用。(只能装在三个瓶子) 买2个,15=8+4+2+1,好像更糟。(只能原创 2017-06-21 13:35:57 · 581 阅读 · 0 评论 -
洛谷P-2114 起床困难综合症 【位运算 思维】
传送门 题目大意: 给定n个位运算操作(&, |, ^), 一个m, 你要从0-m中任意选择一个数字使得依次进行这n中操作出来的结果要尽量的大, 问最大的是多少思路: 实际上我们用一个全零的和全一的分别按顺序进行这n个操作, 然后依次判断每一位的情况来决定最后的结果在位数上的情况. 如果全零的这一位为1, 说明一定在接近结果的位置上或上了一个那个位置为1的, 那么最后的结果的那位上面...原创 2018-07-29 19:40:52 · 220 阅读 · 0 评论