[CSP-S模拟测试]:异或(数学)
题目描述
给定$L,R$,我们希望你求出:
$$\sum\limits_{i=L}^R\sum\limits_{j=L}^R(i\oplus j)$$
其中这里的$\oplus$表示异或运算。
答案对$10^9+7$取模。
输入格式
第一行一个整数$T$,表示数据组数。
接下来$T$行,每行两个整数$L,R(0\leqslant L\leqslant R\leqslant 10^9)$,描述一组数据。
输出格式
每组数据输出一行一个整数,表示答案。
样例
样例输入:
2
1 2
0 1023
样例输出:
6
536346624
数据范围与提示
样例解释:
第一组数据:$1\oplus 1=2\oplus 2=0,1\oplus 2=3$。
数据范围:
对$100\%$的数据,$T\leqslant 50$。
$\bullet$子任务$1$($20$分):保证$L,R\leqslant 1,000$。
$\bullet$子任务$2$($30$分):保证$(R−L)\leqslant 10^6$。
$\bullet$子任务$3$($10$分):保证$L=0,R=2^k−1$。
$\bullet$子任务$4$($40$分):无特殊限制。
题解
又没打正解,讲一下我的做法。
其实答案就是二进制位下每一位$1$的个数乘每一位$0$的个数乘$1<<$当前位数。
那么考虑如何快速求出每一位$1$和$0$的个数。
把每一个数拆成二进制位,如下$\downarrow$
0:0000
1:0001
2:0010
3:0011
4:0100
5:0101
6:0110
7:0111
那么我们会惊喜的发现第$i$位会呈一个$2\times i$的循环节,先是$i$个$0$,之后是$i$个$1$。
算出$0\sim R$中$0$和$1$的个数再减去$0\sim L$的即可,这样就能算出每一位$0$和$1$的个数了,也就求出了答案。
时间复杂度:$\Theta(30\times T)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
long long L,R;
long long ans;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ans=0;
scanf("%lld%lld",&L,&R);
for(long long i=1;i<=30;i++)
{
long long flag=(R/(1<<i)-(L-1)/(1<<i))<<(i-1);
if(R%(1<<i)-(1<<(i-1))+1>0)flag+=R%(1<<i)-(1<<(i-1))+1;
if((L-1)%(1<<i)-(1<<(i-1))+1>0)flag-=(L-1)%(1<<i)-(1<<(i-1))+1;
ans=(ans+flag*(R-L+1-flag)%mod*(1<<i)%mod)%mod;
}
printf("%lld\n",ans);
}
return 0;
}
rp++
[CSP-S模拟测试]:异或(数学)的更多相关文章
- [CSP-S模拟测试]:不等式(数学)
题目描述 小$z$热衷于数学.今天数学课的内容是解不等式:$L\leqslant S\times x\leqslant R$.小$z$心想这也太简单了,不禁陷入了深深的思考:假如已知$L,R,S,M$ ...
- [CSP-S模拟测试]:Race(数学+Trie树)
题目描述 一年一度的运动会开始了.有$N$个选手参赛,第$i$个选手有一个能力值(保证$A[i]$两两不同),比赛一共进行了天.在第$j$天($0\leqslant j\leqslant 2^{m-1 ...
- [CSP-S模拟测试]:A(数学)
题目传送门(内部题44) 输入格式 一行四个整数,分别表示$S,T,a,b$. 输出格式 输出最小步数,数据保证有解. 样例 样例输入: 10 28 4 2 样例输出: 数据范围与提示 样例解释: 先 ...
- [CSP-S模拟测试]:装饰(数学)
题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...
- [CSP-S模拟测试]:最大值(数学+线段树)
题目背景 $Maxtir$最喜欢最大值. 题目传送门(内部题128) 输入格式 第$1$行输入四个正整数$n,m,q$. 第$2$至$n+1$行中,第$i+1$行输入魔法晶石$i$的三种属性$(x_i ...
- [CSP-S模拟测试]:求和(数学)
题目传送门(内部题107) 输入格式 一行五个正整数$x_1,y_1,x_2,y_2,m$ 输出格式 输出一个整数,为所求的答案对$m$取模后的结果. 样例 样例输入: 2 1 5 3 10007 样 ...
- [CSP-S模拟测试]:数列(数学)
题目传送门(内部题95) 输入格式 第一行三个整数$n,a,b$,第二行$n$个整数$x_1\sim x_n$表示数列. 输出格式 一行一个整数表示答案.无解输出$-1$. 样例 样例输入:2 2 3 ...
- [CSP-S模拟测试]:Walker(数学)
题目传送门(内部题86) 输入格式 第一行$n$接下来$n$行,每行四个浮点数,分别表示变换前的坐标和变换后的坐标 输出格式 第一行浮点数$\theta$以弧度制表示第二行浮点数$scale$第三行两 ...
- [CSP-S模拟测试]:Six(数学)
题目传送门(内部题85) 输入格式 一个正整数$N$. 输出格式 一个数表示答案对$1000000007$取模后的结果 样例 样例输入1: 样例输出1: 样例输入2: 样例输出2: 样例输入3: 样例 ...
随机推荐
- ubuntu 设置sudo 免密码
一. 修改sudoers的权限 二. 修改sudoers 文件 <1>. 在文件最后一行添加yourusername ALL=(ALL) NOPASSWD : ALL 三. 修改回sudo ...
- C中的异常处理
1,C 语言崇尚简洁高效,因此语言本身并没有异常处理的相关语法规则,但是异常处理在 C 语言中 是存在的,我们有必要从 C 语言开始先看一看 C 语言中的异常处理是怎样, 然后对比 C++ 里面的异常 ...
- js 获取ip和城市
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script>
- scrapy架构图与执行流程
概览 本文描述了Scrapy的架构图.数据流动.以及个组件的相互作用 架构图与数据流 上图中各个数字与箭头代表数据的流动方向和流动顺序,具体执行流程如下: 0. Scrapy将会实例化一个Crawle ...
- Balloon Robot ZOJ - 3981
大意: n个参赛队, m个座位, 一共交了p次题, 一个机器人每秒钟会从位置$i$走到$i+1$, 若在$m$直接走到$1$, 当走到一个队伍就给该队应得的气球. 对于每道题, 假设交题时间$t_a$ ...
- Freemarker模板的使用简介
需要的jar包: 在pom.xml文件中贴入 <dependency> <groupId>junit</groupId> <artifactId>jun ...
- .Net Core 认证系统源码解析
不知不觉.Net Core已经推出到3.1了,大多数以.Net为技术栈的公司也开始逐步的切换到了Core,从业也快3年多了,一直坚持着.不管环境怎么变,坚持自己的当初的选择,坚持信仰 .Net Cor ...
- centos python environment
3. 在Centos7的docker里装好了httpd,运行报错: $ systemctl start httpd.service Failed to get D-Bus connection: Op ...
- Nginx 别名访问
#添加另一个域名,在浏览器中输入 etiantian.org,总是调到 www.etiantian.org server { listen 80; server_name w ...
- 索尼展示基于MicroLED技术的16K显示屏:约780吋
尽管 8K 彩电刚刚在消费级市场崭露头角,更极致的 16K 却已不慌不忙地登场了. 在日前于拉斯维加斯举办的 NAB 2019 展会上,索尼就秀出了旗下的 16K 显示设备,它目前正在日本横滨的资生堂 ...