[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: 样例 ...
随机推荐
- 【字符串大模拟】潜伏者—— NOIP2009原题
洛谷连接 就一道黄题没啥可以说的……就是要细心…… 学到了神奇的优化 ios::sync_with_stdio(false); cin优化,能跑的比scanf快!棒!(不过要开std) 这题真的还挺简 ...
- Scrapy学习(二)
1.在合适的位置创建一个文件夹,创建python虚拟环境: 2.在虚拟环境中安装Scrapy库和pypiwin32库: 命令:pip install scrapy pip install pypiwi ...
- 启动angular项目,端口被占用
启动项目,npm start,报如下错误: 解决:1.win+R,输入CMD,启动命令行窗口. 2.输入netstat -ano或者netstat -ano|findstr 8080,查看8080端口 ...
- idea启动,mysql连接超时错误
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received ...
- PHP之面试题总结
总结一些面试题,有备无患,走起... 1.熟悉的 nosql 和 sql 有什么区别(优势,劣势) Memcache,Redis 都是内存数据库 redis是一个开源的支持多种数据类型的key=> ...
- 【leetcode 136】136. Single Number
要求:给定一个整数数组,除了其中1个元素之外,其他元素都会出现两次.找出这个只出现1次的元素. 例: array =[3,3,2,2,1] 找出元素1. 思路:最开始的想法是用两次for循环,拿 ...
- linux如何配置使用sendEmail发送邮件
sendEmail是一个轻量级.命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择.使用简单并且功能强大.这个被设计用在php.bash.perl和web ...
- Interviewe HDU - 3486 (ST表+枚举 )(非二分,看下这个数据、)
YaoYao has a company and he wants to employ m people recently. Since his company is so famous, there ...
- MySQL优化建议与使用规范
适用场景:并发量大.数据量大的互联网业务;可以先阅读必须掌握的MySQL优化指南 一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源 ...
- 动态添加+动态绑定(vue数据驱动思路)
先上案例 首先来分析一下,勾选科目的时候,下面同时增加科目的满分值设置. 以前写jquery的思路:当勾选的时候创建dom节点,然后把dom节点append到父节点上,项目采用前后分离的方式进行交互, ...