最佳答案
你会得到一个很大的范围[ a,b ] ,其中“ a”和“ b”通常可以在1到4,000,000,000之间。你必须找出给定范围内所有数字的异或。
这个问题在 TopCoder SRM 中得到了应用。我看到一个解决方案在比赛中提交,我不能弄清楚它是如何工作的。
有没有人能解释一下获胜的解决方案:
long long f(long long a) {
long long res[] = {a,1,a+1,0};
return res[a%4];
}
long long getXor(long long a, long long b) {
return f(b)^f(a-1);
}
在这里,getXor()
是计算传递范围[ a,b ]中所有数字的 xor 的实际函数,而“ f ()”是一个辅助函数。