jzoj3084
發現題目函數本質是:
1.將某一數x的末尾1去掉
2.不斷將這個數/2,直到遇到新的1
我們發現一個數z可以用y步到達數x,記x二進制長度為c,分2種情況討論:
1.x是奇數,則z的前c個二進制數必須與x相等
2.x是偶數,則z的第c位可以任意選,所以只要c-1位相等即可
我們弄出答案區間再統計答案即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll k,a,b;
ll ct(ll x){
ll c=1,kk=k,rr=0;
while(1){
ll l=kk,r=kk+c-1;
if(r<=x)rr+=r-l+1;
if(x<l)break;
if(l<=x&&x<=r){
rr+=x-l+1;
break;
}
kk<<=1;
c<<=1;
}
if(k%2==0)rr*=2;
return rr;
}
int main(){
scanf("%lld%lld%lld",&k,&a,&b);
if(!k){
printf("%lld",b-a+1);
return 0;
}
printf("%lld",ct(b)-ct(a-1));
}
jzoj3084的更多相关文章
随机推荐
- Mac版Java安装与配置
一.下载并安装JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 双击下载的 ...
- centos 7 搭建pip源
一.安装pip2pi工具: pip install pip2pi 或编译: git clone https://github.com/wolever/pip2pi cd pip2pi python s ...
- 852. Peak Index in a Mountain Array
class Solution { public: int peakIndexInMountainArray(vector<int>& A) { return max_element ...
- 2018.11.01 NOIP训练 树的排列(树形dp)
传送门 跟这道题差不多. 只不过是让权值小的儿子做权值大的儿子的父亲而已. 代码
- Codeforces Round #538 (Div. 2) F 欧拉函数 + 区间修改线段树
https://codeforces.com/contest/1114/problem/F 欧拉函数 + 区间更新线段树 题意 对一个序列(n<=4e5,a[i]<=300)两种操作: 1 ...
- TCP粘包问题分析和解决(全)
TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送 ...
- c# radiobutton
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 批处理最完整人性化教程(.bat文件语法)
原文链接:http://www.cnitblog.com/seeyeah/archive/2009/01/15/53808.html 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字 ...
- 16-margin的用法
margin塌陷问题 当时说到了盒模型,盒模型包含着margin,为什么要在这里说margin呢?因为元素和元素在垂直方向上margin里面有坑. 我们来看一个例子: html结构: <div ...
- C#重点内容之:事件(Event)
一.事件的五个组成部分 事件的五个部分: 事件拥有者(对象) 事件成员(Event ,成员) 事件的响应者(对象) 事件处理器(成员,本质是一个回调方法) 事件订阅——把事件处理器与事件关联在一起 二 ...