IPV4表达方式:32位的IP地址如果用二进制表示的话是32位组的二进制数,如11111111111111111111111111111111;这样的表示方式相当难记忆,于是就有了一种比较好记忆的方式叫点分十进制,将这个32位组的数分成4个八位组的数字,并且每个八位组都用十进制来表示如255.255.255.255..
分类:
其他好文 时间:
2014-11-27 12:58:15
阅读次数:
190
题目大意:给你一些点,他们可以连通,如果距离超过了d那么就要经过加油站,建立加油站的费用为第i个点是2^(i-1)。求费用最小,输出二进制表示的最小费用。
费用和sum最坏等于=2^0+2^1+……+2^(n-1)。所以最高位为0这个数字才会最小,从最高位暴力枚举如果删掉这个点之后图是连通的那么就可以删掉,否则不可以。
求图是否连通的时候可以爆搜求解,也可以并查集。
charge-s...
分类:
其他好文 时间:
2014-11-26 22:40:40
阅读次数:
238
题意:
输入n,L,U,在L,U之间找一个数M使得n与M按位或的值最大,如果有多个M输出最小的那个。
思路:
将数化成二进制再结合或的性质就可以很容易得到一个贪心的策略:将n化为32位的二进制表示后
对于n中为0的位,使得M对应的二进制位为1.这样显然可以使得n|M值最大,但是同时还要考虑区间的限制;
n中二进制为0时,M对应的二进制位取1的条件是:必须保证后面M的最小值小...
分类:
其他好文 时间:
2014-11-23 19:00:57
阅读次数:
153
整数幂
算法1:对实数x的n次幂设计一个有效的算法。一种直接的方法是对x用迭代方法自乘n次,这种方法十分低效,因为它需要O(n)乘法。一个高效的方法可以用如下方法推出,令m=n/2,假设已经知道如何计算x^m。那么有两种情况:如果n是偶数,那么x^n = (x^m)^2;否则x^n = x(x^m)^2。
算法2:令n的二进制表示为dn-1.....d1,d0。从y=1开始,由n的高位至地位扫...
分类:
编程语言 时间:
2014-11-23 14:33:50
阅读次数:
238
题意:一棵 n 个结点的树,树边有权值w(0
题目链接:http://poj.org/problem?id=3764
——>>取0为根,预处理出所有结点到根的异或xOr[i]。那么结点 a 与结点 b 之间的路径异或就是xOr[a] ^ xOr[b]。。
权值 w 最多31位,于是,将每个xOr的二进制表示从高位到低位插入到 01 Trie中(0为0,非0为1)。。
查询时从高位开始贪心...
分类:
其他好文 时间:
2014-11-22 10:40:33
阅读次数:
230
#include int countbit(unsigned int x);int main(void){ int x,n; printf("请输入一个无符号整数:\n"); scanf("%d",&n); x=countbit(n); printf("%d\n",x);}int countbit(...
分类:
其他好文 时间:
2014-11-20 15:13:26
阅读次数:
181
题意:
10000个询问 每个询问输入L和R(10^18) 输出在区间内二进制表示下1最多的数字 如果1个数相同输出最小的
思路:
YY一下 觉得后几位全是1的时候能保证1的个数多 那么如何构造出这个数字呢??
将L和R都变成二进制 从高位到低位 L和R相同的那几位一定是不变的 因为要保证构造出的数字在区间内 然后分两种情况
一是L和R一直相同 那就没什么好说的了 ...
分类:
其他好文 时间:
2014-11-19 20:39:00
阅读次数:
164
题意:找出小于n是m个数每个数的倍数的数的个数。思路:用二进制表示是那几个数的倍数。 二进制进行容斥,去掉小于0的数。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 __int64 n,m,g; 7 __int64 a...
分类:
其他好文 时间:
2014-11-19 12:00:07
阅读次数:
162
题意:求出在一个区间[A,B]内与N互质的个数 。思路:先求出n的质因子,然后求出与N的质因子不互质的个数然后总个数减去就是。用位运算二进制表示那个因子用到过,实现容斥原理。在1到n之间是c倍数的个数为n/c; 1 #include 2 #include 3 #include 4 #defin...
分类:
其他好文 时间:
2014-11-19 00:11:57
阅读次数:
284