题目链接:https://atcoder.jp/contests/abc121/tasks/abc121_d

题目很裸(Atcoder好像都比较裸

就给一个区间求异或和

n到1e12

肯定不能O(n)推

那肯定得通过异或的一些性质

用$f\left( a,b\right)$表示[a,b]区间的异或和

我只观察出了$f\left( 2^{a},2^{b}-1\right)$的异或和肯定为0。

通过$f\left( 2^{a},2^{a+1}-1\right)$每一位都会出现偶数次

例如 [4,8)

4 : 100

5 : 101

6 : 110

7 : 111

异或和就为0

那么的$f\left( 2^{a},2^{b}-1\right)$ = $f\left( 2^{a},2^{a+1}-1\right)$ ^ $f\left( 2^{a+1},2^{a+2}-1\right)$ ^ ... ^  $f\left( 2^{b-1},2^{b}-1\right)$ = 0

在这里参考了大佬的博客https://www.cnblogs.com/Mychael/p/8633365.html原来有结论orz

得到上述结论后 不难得到 $f\left( 0, n\right)$ = $f\left( 2^{k}, n\right)$

分奇偶来看

当n为奇数

那么$f\left( 2^{k}, n\right)$ k的那一位会出现 n - 2^{k} + 1次 也就是偶数次

那么最后结果最高位就为0了 $f\left( 2^{k}, n\right) = f\left( 0, n-2^{k}\right)$ 不清楚可以看下上面 4,5,6,7的例子

是不是最高位的1都可以减去了 也就是都减去4 $f\left( 4, 6\right) = f\left( 4 - 4, 6 - 4\right) = f\left( 0, 2\right)$ 没错吧!

$f\left( 0, n-2^{k}\right)$ 又可以表示为 $f\left( 0, n'\right) = f\left( 2^{k-1}, n'\right)$ 接着推推推

推到最后 到了0~4的范围里 为啥到4(2的2次)而不是到2(2的1次)呢

因为上述结论是 $f\left( 2^{a},2^{a+1}-1\right) = 0$ 如果a等于0了 $f\left( 2^{0},2^{1}-1\right) = f\left( 1,1\right) = 1 \neq 0$

所以结论只适用于a >= 1的情况 所以最后应该在0~4里面确定结论

$n\equiv 1\left( mod4\right)$ 那么最后还剩最末位一个1 即 $f\left( 0,n\right) =1$

$n\equiv 3\left( mod4\right)$ 那么最后还有1和3进行异或 最末位就为0了 即 $f\left( 0,n\right) =0$

n为偶数的时候(感觉原博主这部分的推导写错了 但结论是对的

假如这个n是2的次幂了 那么$f\left( 2^{a},n\right) = n$就ok了

如果不是的话 $f\left( 2^{k}, n\right)$ k的那一位会出现 n - 2^{k} + 1次 也就是奇数次 那么得保留

所以 $f\left( 2^{k}, n\right) = f\left( 0, n-2^{k}\right) Xor 2 ^{k}$ 这次得看$n-2^{k}$是否为2的次幂

是的话就是$f\left( 2^{k}, n\right) = f\left( 0, n-2^{k}\right) Xor 2 ^{k} = n-2^{k} Xor 2 ^{k} = n$

如果一直不是的话 就会把原来的n的每一位都积累起来 最后到$6 - 2^{2} = 2$ 这个时候最后还要异或上1 答案就是n+1

也就是 $n\equiv 0\left( mod4\right)$ $f\left( 0,n\right) =n$

$n\equiv 2\left( mod4\right)$ $f\left( 0,n\right) =n + 1$

总结成程序就是

int Xor(int a) {
if (a % == ) return a;
if (a % == ) return ;
if (a % == ) return a + ;
return ;
}

答案即为$f\left( a, b\right) = f\left( 0, b\right) Xor f\left( 0, a-1\right)$

代码如下

#include <cstdio>
using namespace std; long long Xor(long long a) {
if (a % == ) return a;
if (a % == ) return ;
if (a % == ) return a + ;
return ;
} int main() {
long long a, b;
scanf("%lld%lld", &a, &b);
printf("%lld", Xor(a -) ^ Xor(b));
return ;
}

推的过程比较混乱建议手动模拟一遍( ̄▽ ̄)

Atcoder Beginner Contest 121 D - XOR World(区间异或和)的更多相关文章

  1. AtCoder Beginner Contest 121 题解

    题目链接:https://atcoder.jp/contests/abc121 A White Cells 分析:题目数据规模很小,直接暴力修改都可以.或者可以推出公式. 代码: #include & ...

  2. AtCoder Beginner Contest 098 D - Xor Sum 2

    D - Xor Sum 2 Time limit : 2sec / Memory limit : 1024MB Score : 500 points Problem Statement There i ...

  3. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  4. AtCoder Beginner Contest 238 A - F 题解

    AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...

  5. AtCoder Beginner Contest 260 (D-E)

    AtCoder Beginner Contest 260 - AtCoder D - Draw Your Cards 题意:N张卡牌数字 1-n,以某种顺序排放,每次拿一张,如果这一张比前面某一张小( ...

  6. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  7. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  8. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  9. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

随机推荐

  1. [HNOI2019]多边形[二叉树建模、组合计数]

    题意 题目链接 分析 不难发现终态一定是 \([2,n-2]\) 中的每个点都与 \(n\) 连边. 关于凸多边形的划分问题,可以将它看作一棵二叉树:每个树点可以看做点可以看做边. 本题中看做点来处理 ...

  2. 破解爱奇艺优酷等Vip视频

    现在网络上兴起卖低价Vip会员的,博主在这里介绍一个破解软件,不需要登录,找到视频播放页就可以观看! 软件下载地址:http://zyzpp.cn/ 1.下载软件安装后打开: 2.比如我们要看爱奇艺的 ...

  3. .call() 和 .apply() 的含义和区别

    JavaScript中apply与call的用法意义及区别 apply()与call()的区别 javascript中apply和call方法的作用及区别说明 .apply()用法和call()的区别 ...

  4. 助教总结 -【福大软工实践-2017-2018-K班】

    助教总结 -[福大软工实践-2017-2018-K班] 非常抱歉这么晚才来写总结! 助教工作 助教共发表博客39篇. 助教共点评约500条. 起步 对于常规课程的起步,通常都是在第一次课堂上由老师对课 ...

  5. atcoderI - Coins ( 概率DP)

    I - Coins Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Let NN b ...

  6. 使用Dockerfile来构建镜像

    Dockerfile原理 创建Dockerfile Dockerfile实例 Dockerfile指令 注释 FROM MAINTAINER RUN ADD WORKDIR ENV USER COPY ...

  7. 【学习总结】【Java】Git学习-上传本地已有代码到GitHub

    < Git学成归来后的第一次实战 > 上传本地已有代码到GitHub 以之前学了一小半的Java基础教程代码为例 <深坑预警:在GitHub新建仓库那一步,不要勾选readme,不然 ...

  8. 2019省赛训练组队赛3.31周四-17fj

    https://vjudge.net/contest/289558#overview A - Frog Therearex frogs and y chicken in a garden. Kim f ...

  9. 2 Modals of necessity

    1 情况动词must 和词组have to, need to ,have got to 都表示必须做某事或者要求做某事. need to  have to  must have got to When ...

  10. Azure系列2.1.7 —— BlobRequestOptions

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...