牛客周赛144-D

283 字
1 分钟
牛客周赛144-D

牛客周赛144 - D

考点: 位运算 , 同等取余转组合数#

题面#

\hspace{15pt}给定一个区间 [l,r][l,r]和一个整数 k,其中 k2 的非负整数次幂。
\hspace{15pt}请计算有多少个二元组 i,j(li<jr)i,j(l\leq i<j\leq r),满足 ixorji\operatorname{xor} jkk 的倍数。

思考#

\hspace{15pt}要使 ixorji\operatorname{xor} jkk 的倍数,且发现kk2 的非负整数次幂。则 k 的二进制一定是由 一个1和m1m-1个0组成。所以对于所有 iji,jixorji\operatorname{xor}j 的二进制后缀有m1m-1 个0的时候则成立。 \hspace{15pt}i,ji,j 的后 m1m-1 个二进制数相同时成立一个二元组,在所有数 [L,R][L,R] 里共有R-L+1 个数字,对于每种后缀最少有 (RL+1)/k(R-L+1) / k 种可能。这一部分共有 (RL+1)×(Rl)÷2×k(R-L+1)\times(R-l)÷2\times k合法二元组。对于剩下的 (R-L+1)%k 则有(RL+1)modk×(RL+1)÷k(R-L+1)\bmod k \times(R-L+1) \div k然后将这两个公式求和即可

代码#

signed main(){
int l,r,k;
cin>>l>>r>>k;
int n=r-l+1;
int q=n/k;
long long ans=q*k*(q-1)/2+n%k*q;
cout<<ans<<endl;
}

思维亮点#

\hspace{15pt}用2的次幂的倍数来将一个区间的数字按 来分类然后通过组合数)计算来得到答案

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
牛客周赛144-D
https://firefly1.1298055690.workers.dev/posts/牛客周赛144---d/
作者
影颜
发布于
2026-05-17
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
影颜
行至归处,不知来路
通缉令
被通缉者啊,请你逃往深渊
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
15
分类
5
标签
20
总字数
19,745
运行时长
0
最后活动
0 天前

文章目录