Java中使用异或(XOR)来交换两个整形变量的数值
分类:
其他好文 时间:
2015-10-07 13:23:44
阅读次数:
167
SPOJ Optimal Marks(最小割的应用)真心好题,网络流简直无处不在,能够解决一些看似困难的问题,希望能从中学到其精髓—-模型建立+建图题意:
给定一个无向图,每个顶点都有对应值,每条边的权值为val[u] ^ val[u],同时已知其中某些点的值,求其他点的权值使得最终的图的边权和最小?
分析:
首先边与边之间异或操作,不太好直接处理,因为异或操作每一位运算相互独立,我们来逐位...
分类:
其他好文 时间:
2015-08-31 11:52:20
阅读次数:
165
用元素交换函数实现数组逆置很简单,如下面代码:(数组左右元素交换)
#include
#include
using namespace std;
void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int lenth = sizeo...
分类:
编程语言 时间:
2015-07-05 16:45:10
阅读次数:
189
每次操作实际上相当于把点到根上所有点消除。$O({n^2})$暴力显然,用trie维护每棵子树的后继局面,然后需要进行trie树异或操作和tire树合并操作。异或操作直接打标记合并操作前,类似启发式合并,先把子树较小的的标记全部下放,然后全部按照另一棵的标记转好,然后把它合并到另一颗里面去。正确性因...
分类:
其他好文 时间:
2015-06-16 20:58:57
阅读次数:
479
题目: 简化后问题:有很多机器id,其中只有一个或两个id被丢失,正常情况下每个id个数为2,请问如何找到丢失的id是几。java解法一实现:/*** 使用异或操作 X异或X等于0,X异或0等于X,所有元素异或结果就是丢失的元素* 如果丢失id个数为2,异或结果就是A异或B的结果,然后将数组分成两....
分类:
其他好文 时间:
2015-05-14 20:26:04
阅读次数:
117
题目描述世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
输入例子:
1999 2299
输出例子:
7题目分析二进制中,统计两个数的相应位(bit)相同可以采用异或操作,异或运算结果相同为0不同为1。所以两个数异或的结果中1就是相同位数。...
分类:
其他好文 时间:
2015-05-08 00:08:33
阅读次数:
274
题目:1、给一数组,所有的数都出现了两次,只有一个数出现了一次,求这个数。2、给一数组,所有的数都出现了两次,只有两个数出现了一次, 求这两个数。思路:位运算1、将数组里所有的数都做异或操作,因为相同的数异或之后就等于0,所以结果就是只出现一次的那个数。2、同样将数组里所有的数做异或操作,相同的数异...
分类:
编程语言 时间:
2015-05-03 11:50:33
阅读次数:
141
分析问题 任何一个数字异或它自己都等于0,通过这个思想遍历数组,用一个result累计异或操作,如果遇到某一个数两次,必定消除了异或操作,换句话说就是如果我们从头依次异或数组中的每一个数字,那么最终的结果应该是那个只出现一次的数字 要想说的更明白一点不如举个例子 实例 比如int[] array={...
分类:
编程语言 时间:
2015-05-02 18:01:33
阅读次数:
198
void swap(int &a,int &b){a^=b;b^=a;a^=b;}^ 在 C 里面是按位异或操作符。异或运算的原理应该清楚吧?相同的话异或的结果就是 0,不同的话就是 1。举个例子,比如 a 表示十进制的 5,b 表示十进制的 12,按位异或结果就是:a = 0101 (5 的二进制...
分类:
其他好文 时间:
2015-04-17 17:38:31
阅读次数:
118
题意:通过他给的代码,跑出 n个数a【i】。 然后取任意多个连续的数,让他们 异或操作。 计算有多少种取法,使操作后结果为0.
做法:连续就想到了前缀和。 把前i个a的异或操作结果放在 num[i]中, 那么a【i】到a【j】个数的异或结果就是 num[j]^num[i-1]。 还有num【i】自身代表了开头到a【i】这些数的异或结果。
然后只要计算有多少num【i】为0,以及多少 num[j]^num[i-1] 为0就行了。再把总方案数 c(n,2)减去为0的个数,就是答案了。但是普通...
分类:
其他好文 时间:
2015-04-07 21:44:43
阅读次数:
231