//将其从小到大排序
//对于每一个数,其0点位为其前面数的最高位,那么它们的异或一定大于它们两个的值
#include
#include
#include
#include
using namespace std ;
const int maxn = 100010;
long long map[40];
int a[maxn] ;
long long solve(int m...
分类:
其他好文 时间:
2015-05-04 18:14:01
阅读次数:
127
引言 一般这种不能用四则运算的题都只有用位运算来做,目的是加强大家对计算机计算的理解,真是有点扯淡呢 解决问题 首先我们得思考计算机是怎样做加法的呢,比如3加4,如果转换成二进制是0011和0100,加起来是7,也就是0111,相当于是两个二进制的异或运算 但是我们再举一个例子就是4加4,会发现,两...
分类:
编程语言 时间:
2015-05-03 20:32:22
阅读次数:
154
一.运算符的种类和运算规则: & 与:全1则1,有0则0 | 或:有1则1,全0则0 ^ 异或:相同为0,不同为1 ~ 取反:~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0 >右移:将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0二.各种位运...
分类:
编程语言 时间:
2015-05-03 20:20:10
阅读次数:
176
变量交换交换变量有很多种方法,一般分为两类,借助第三个变量和不借助第三个变量两种方式.对于ACMer 来说,下面的代码无疑是最优的。1 int main()2 {3 int a , b;4 cin >> a >> b;5 cout 2 3 int main() 4 { 5...
分类:
其他好文 时间:
2015-05-03 11:53:18
阅读次数:
153
题目:1、给一数组,所有的数都出现了两次,只有一个数出现了一次,求这个数。2、给一数组,所有的数都出现了两次,只有两个数出现了一次, 求这两个数。思路:位运算1、将数组里所有的数都做异或操作,因为相同的数异或之后就等于0,所以结果就是只出现一次的那个数。2、同样将数组里所有的数做异或操作,相同的数异...
分类:
编程语言 时间:
2015-05-03 11:50:33
阅读次数:
141
分析问题 任何一个数字异或它自己都等于0,通过这个思想遍历数组,用一个result累计异或操作,如果遇到某一个数两次,必定消除了异或操作,换句话说就是如果我们从头依次异或数组中的每一个数字,那么最终的结果应该是那个只出现一次的数字 要想说的更明白一点不如举个例子 实例 比如int[] array={...
分类:
编程语言 时间:
2015-05-02 18:01:33
阅读次数:
198
按位与运算符(&)参加运算的两个数据,按二进制位进行“与”运算。运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为“1”,否则为0例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。另,负数按补码形...
分类:
其他好文 时间:
2015-05-02 11:09:39
阅读次数:
102
运用了static函数实现文件封装提升变量访问效率的关键字register,该关键字暗示该变量可能被频繁访问,如果可能,请将值存放在寄存器中内存集中管理,每个节点在取消后并没有立即释放内存,而是调用cleanup时统一释放定时器的hash函数是异或结果求余生成keystatic unsigned ....
分类:
Web程序 时间:
2015-05-01 13:20:20
阅读次数:
141
粗糙的给出了分析,最近比较累,以后会改进的。题目中包括三个小的问题,由简单到复杂:1,如果只有一个出现一次,考察到异或的性质,就是如果同一个数字和自己异或的活结果为零,那么循环遍历一遍数组,将数组中的元素全部做异或运算,那么出现两次的数字全部异或掉了,得到的结果就是只出现一次的那个数字。2,如果有两...
分类:
编程语言 时间:
2015-05-01 10:37:06
阅读次数:
186
1 /** 2 Author: Oliver 3 ProblemId: ZOJ3870 Team Formation 4 */ 5 /* 6 思路 7 1.异或运算,使用^会爆,想到二进制; 8 2.我们可以试着从前往后模拟一位一位的^那么只要当前位结果变大便是; 9 3.一般我们如何利用二进制呢....
分类:
其他好文 时间:
2015-04-29 23:11:05
阅读次数:
175