
位运算
f_zyj
一个追逐蝴蝶的人!
展开
-
神奇的位运算——进制转换问题(16转8)
说道位运算符,应该都了解,但是很少有人会用,在网上看别人的代码,我至今只见过一道题用到了位运算符,并被它深深的搞晕了(当然,他搞晕我是要负责的,我现在已经深深的迷上了他,真的是太神奇了),位运算符的原理容易懂,也都知道他运算的效率很高,但是他究竟怎么去用,用在什么地方,我想不少人都说不清楚,所以当我看到位运算符可以这么玩的时候,我感到很神奇!首先,我们先来一个简单的程序来说明位运算符的神奇。问题原创 2016-03-05 17:42:12 · 4628 阅读 · 0 评论 -
HDU-5883-The Best Path
ACM模版描述题解给定一个无向图,关于欧拉路的问题。这里我们要求的是这个路径的结点异或在一起的最大值。首先,我们可以通过判断度的奇偶性来判断是否是 ImpossibleImpossible,因为欧拉路径存在两种,一种是欧拉通路,一种是欧拉回路。通路是起点、终点是不同点,那么我们需要将起点终点多算一次,并且起点和终点是固定的,必然是度为奇数的结点,那么我们也就知道了这种情况需要度为奇数的结点只有连个;原创 2017-06-28 03:39:48 · 797 阅读 · 0 评论 -
算法训练 Lift and Throw (DFS && 位运算)
问题描述 给定一条标有整点(1, 2, 3, …)的射线. 定义两个点之间的距离为其下标之差的绝对值. Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点. 每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次. 1.移动一定的距离 2.把另一个角色高举过头 3.将举在头上的角色扔出一段原创 2016-03-12 19:18:32 · 5278 阅读 · 16 评论 -
51Nod-1560-扔人游戏
ACM模版描述 题解这个题我其实早就做过了,今天忽然发现 51Nod 上竟然也出了这道题,果然来源是 CF,所以就直接拿去年的代码提交了上去,那时候学 dfs 还是新手,初学,搞这道题真是煞费苦心,所以我的代码中注释详尽的狠,可能有的地方理解有些幼稚,但是也许有那么点可取之处,大家可以仔细看看代码,就是一个 dfs+位运算优化dfs + 位运算优化。这里的代码由于是我去年开春时写的,所以代码风格和原创 2017-07-03 15:13:47 · 403 阅读 · 1 评论 -
51Nod-1779-逆序对统计
ACM模版描述题解虽然一眼就看出来了状压 dp,但是再往后我就不知道从何下手了,有些懵逼,不是太清楚如何转移。找了找官方题解,发现我果然想不到这个,但是我依然无法按照题解的提示写出来,这就尴尬了,好在网上很多大神写过这个博客,我就参考了一下他们的代码,我只想说……╮(╯▽╰)╭哎,顺便贴一下官方题解吧,毕竟我这么菜,也说不出个一二来~~~这个预处理完全摸不着头脑,没有见过……代码#include <原创 2017-07-11 12:44:24 · 598 阅读 · 3 评论 -
51Nod-1674-区间的价值 V2
ACM模版描述题解虽然是四级题,但是真不会,找了题解,甚是不错。以下题解来自abclzr的博客:对区间分治,统计[l, r]中经过mid的区间的答案。 我的做法是从mid向右扫到r,统计出所有[mid, i], mid ≤ i ≤ r的and和or值。 然后发现这些and和or值有很多相同的,把相同的压在一起并记录sum,再从mid - 1扫到l并暴力从mid向右统计答案。 事实上因为[mid原创 2016-12-26 20:04:33 · 846 阅读 · 0 评论 -
51Nod-1596-搬货物
ACM模版描述题解猛一看好心塞,不会做,但是抱着试试的心态写写画画,然后发现还是我对二进制知之甚少,原来只要先将序列中每一次方的数目存入数组,然后对应进位即可。好渣啊我~~~ 最近几天荒了些许,好几天没有做题了/(ㄒoㄒ)/ ~~不做题果然手生啊!这道题要强调两点,第一卡I\O了,需要用输入外挂,第二,第二个 for 循环中之所以要在判断条件MAXW 的基础上加100,是因为存在进位,可能会超过MA原创 2016-12-26 16:53:20 · 1371 阅读 · 0 评论 -
int abs(int n)实现对比
ACM模版abs()函数对比在C\C++的<math.h>和<cmath>中均有abs的实现,而今天心血来潮,另外手动实现了两个abs()函数,用来做一下对比,一种是通过关系运算符判断正负求解,一种是通过位运算求解,仔细看哦,很值得回味的测试……(PS:为了增大区别,每个函数的运算次数为MAXN次)。#include <cstdio>#include <iostream>#include <ct原创 2016-11-30 03:02:08 · 5195 阅读 · 0 评论 -
51Nod-1406-与查询
ACM模版描述题解听说卡了I/O,所以直接上输入输出外挂~~~动态规划,挺巧妙的,复杂度O(nlogn),先将所有数添加到cnt[]中,然后从最大数二进制最高位开始,逐位处理即可。可能有些拧的感觉,自己写几组数据试试就明白了~(≧▽≦)/~啦啦啦。代码#include <iostream>#include <cstdio>#include <cstring>#define ll long lon原创 2016-10-17 01:36:41 · 934 阅读 · 0 评论 -
51Nod-1491-黄金系统
ACM模版描述题解拿到这种题,不用多想,先枚举一些q^i,可以发现在某种程度上其符合斐波那契数列…… q^0用A表示,q^1用B表示, 我们可以发现,每一个数都可以用xA + yB表示, 而这里的x和y在一定程度上都符合斐波那契数列。 这也就给了我初始的想法,能否遍历一遍, 遇见相连两个都是1的时候就减去这两个1继而在高位添1, 就着这个想法尝试,这时注意到n-i的问题, 于是乎,想了原创 2016-09-29 03:49:48 · 654 阅读 · 2 评论 -
51Nod-1315-合法整数集
ACM模版描述题解一道很有意思的位运算题。这里主要是考验对位运算的理解。首先,我们可以将集合中的数划分为两种数,第一是根本不需要删除的元素,第二种是可能删除的元素。那么我们先来分析第一种,什么叫做不可能删除的元素呢? 经过观察可以发现,只有当(Y | X) > X时,这个元素一定不必删除,因为凡是含有这个元素的集合,Fun(SubS)一定会大于X,这是因为这个Y存在X的二进制位为0位,Y对应位为1原创 2016-08-04 01:46:11 · 2339 阅读 · 6 评论 -
字符串 HASH
ACM模版字符串 HASH/* * 字符串 Hash * 注意:mod选择足够大的质数(至少大于字符串个数) */unsigned int hashA(char *url, int mod){ unsigned int n = 0; char *b = (char *)&n; for (int i = 0; url[i]; i++) { b[i原创 2016-06-15 18:03:09 · 2093 阅读 · 0 评论 -
x & (-x)
结论 整数运算x & (-x),当x为0时结果为0;x为奇数时,结果为1;x为偶数时,结果为x中2的最大次方的因子。解析&是按位与操作,即: 1 & 1 = 1, 1 & 0 = 0, 0 & 0 = 0。因为负数的补码 = 正数的补码取反 + 1,因此若没有+1的存在, x & (-x)的结果就是0。分析一下可知,该操作保留的是正数的最低有效bit。任意一个数(不管奇偶),都可以表示原创 2016-06-09 23:20:00 · 1481 阅读 · 0 评论 -
51Nod-1496-最小异或和
ACM模版描述题解这个题可以状压 dpdp 解,看到一个很玄学的解法——按规律解,虽然这种解法很容易漏,但是 51Nod51Nod 有数据,可以补漏,不过很伤点头盾……心疼我的点头盾,花了好几十~~~代码#include <iostream>using namespace std;typedef long long ll;ll l, r, k;int main(){ cin >> l >>原创 2017-07-21 11:46:35 · 1314 阅读 · 0 评论