大家都知道,假如有a,b两个整型数,我们可以用
a^=b;
b^=a;
a^=b;
来交换a,b的值,在这里我说说其中的原理:
^ 在 C 里面是按位异或操作符,相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:
a = 0101 (5 的二进制表示)
b = 1100 (12 的二进制表...
分类:
其他好文 时间:
2014-09-22 14:10:22
阅读次数:
203
在C++中,交换两变量的值一般第一反应都会是如下的代码:
{
temp=a;
a=b;
b=temp
}
但是题目要求不允许使用临时变量temp呢?可能就需要想一会了。但也有解决办法:
{
b=a+b;
a=b-a;
b=b-a;
}
这种做法在a和b数值较小的情况下是对的,但是a+b如果很大则会溢出,所以也不是最优的解法。最好的方法是使用异或:
{
a ^= b...
分类:
编程语言 时间:
2014-09-21 17:10:00
阅读次数:
330
Codeforces Round #267 (Div. 2)
A:签到题,直接for一遍
B:取异或就是不同的数,然后bitcount一下判断即可
C:dp,dp[i]表示到i的最大值,然后对取与不取当前位置进行转移即可,要先把前缀和预处理出来
D:先利用map,把字符串hash掉,然后建图,现场在做的时候是直接记忆化搜索,不过这样处理不了环的情况,果断fst了,后来换了下...
分类:
其他好文 时间:
2014-09-19 12:07:15
阅读次数:
196
逻辑(布尔型)运算符用于对boolean型的结果的表达式进行运算,运算的结果都是boolean型。其运算结果如下所示:运算符 运算 例子 结果 & AND(与) false&true false | OR(或) false|true true ^ XOR(异或) false^true true ! ...
分类:
Web程序 时间:
2014-09-18 22:11:14
阅读次数:
233
方法1:用异或语句a = a^b;b = a^b;a = a^b;注:按位异或运算符^是双目运算符,其功能是参与运算的两数各对应的二进制位相异或,当对应的二进制相异时,结果为1。参与运算数仍以补码形式出现。方法2:a = a+b;b = a-b;a = a-b;如果a、b都是比较大的两个数,a=a+...
分类:
其他好文 时间:
2014-09-17 18:31:02
阅读次数:
183
题目链接
题目大意:
给出n,然后给出一个数字串,长度为n + 1, 范围在[0, n - 1].然后要求你找出另外一个序列B,满足上述的要求,并且使得t = A0^B0 + Ai + 1 ^ Bi + 1 + ... + An ^ Bn 最大。
解题思路:
对于一个数字进行异或,要求结果最大的话,那么取这个数字的二进制互补数字是最好的情况,并且可以发现每次找到一个数字和对应的互补...
分类:
其他好文 时间:
2014-09-17 12:14:02
阅读次数:
148
Sequence operation
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6270 Accepted Submission(s): 1862
Problem Description
lxhgww...
分类:
其他好文 时间:
2014-09-17 10:21:32
阅读次数:
295
/* 题意:Nim游戏! 思路:通过异或,判断将n个数表示成二进制的形式之后,是否对应位的数字1 的个数是偶数! */ #includeusing namespace std;int main(){ int n, x, s; while(cin>>n){ s=...
分类:
其他好文 时间:
2014-09-16 21:46:11
阅读次数:
219
这个题目有三种变形。第一种,一个数组中所有数都出现了两次,只有一个数出现了一次,求这个数。这个题比较简单,只要知道数字间异或的特性,就可以很容易的得出答案。int find_num_appear_once(int *data, int length){ if(data==NULL || len...
分类:
其他好文 时间:
2014-09-16 18:56:40
阅读次数:
282