先前綴和一發,問題表示求[0-l2][0-r2]滿足條件的數的個數

假設可以把某一個數拆分成[前面任意個數][00…0-11…1(個數相同)]的區間

那麼問題會簡單的多,因為任意一個a位的整數分別xor[00…0(a個)-11…1(a個)]的結果會取遍00…0-11…1中的任意一個整數

這說明,我們拆出的區間大小都是2的冪次

很顯然想到x&-x操作,這個操作可以把某一個數最後的1去掉,從而新數和舊數形成的區間的大小是2的冪次

但是,x&-x操作是適用于區間開頭為1的情況,所以我們可以將要求的數加上1,記為b

這樣,b-1和b-b&-b就變成了一個合法的結尾為00…0-11…1的區間

我們可以枚舉每一個這樣子的區間,記00…0-11…1的長度,第一個區間為a,第二個為b

那麼異或起來的結果就是[兩個區間在max(a,b)之前的長度異或起來][max(a,b)個00…0-11…1]

這樣,問題就變成了求出連續區間中能被m整除的數的個數

實現上,我們可以枚舉a+1和b+1的每一個1位,則a+1在這一位後面和b+1在這一位後面的數全為00…0-11…1

然後我們可以把a和b的這一位去掉取前面的所有位,這樣可以計算出前面的部分

注意別忘記求出來的結果乘以另一個較短的位的00…0-11…1的數的個數

代碼:

#include<bits/stdc++.h>
using namespace std;
#define mo 998244353ll
typedef long long ll;
ll m;
ll get(ll l,ll r){
	if(l%m==0)return (r/m-l/m+1ll+mo)%mo;
	return (r/m-l/m+mo)%mo;
}
ll ct(ll a,ll b){
	ll ans=0;
	for(ll i=61;i>=0;i--)
		for(ll j=61;j>=0;j--)
			if((a&(1ll<<i))&&(b&(1ll<<j))){
				ll m1=max(i,j),m2=min(i,j);
				ll pre=((a^(1ll<<i))^(b^(1ll<<j)))&(~((1ll<<m1)-1ll));
				ll suf=pre+(1ll<<m1)-1ll;
				ans=(ans+get(pre,suf)*((1ll<<m2)%mo)%mo)%mo;
			}
	return ans;
}
int main(){
	freopen("mod.in","r",stdin);
	freopen("mod.out","w",stdout);
	ll a,b,c,d;
	scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&m);
	printf("%lld",(ct(b+1,d+1)-ct(b+1,c)-ct(a,d+1)+ct(a,c)+mo)%mo);
}

jzoj5894的更多相关文章

  1. JZOJ5894【NOIP2018模拟10.5】同余方程

    题目 Description

随机推荐

  1. Linux统计某文件夹下文件的个数

    ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件的个数,包括子文件夹里的 ...

  2. myschool 1204

    http://oj.jxust.edu.cn/problem.php?id=1274 #include <iostream> #include <set> using name ...

  3. [SoapUI] 比较JSON Response

    比较两个JSON, ID是数字时,处理成统一的格式:只保留小数点后5位 package direct; import org.json.JSONArray; import org.json.JSONE ...

  4. Storm 系列(三)Storm 集群部署和配置

    Storm 系列(二)Storm 集群部署和配置 本章中主要介绍了 Storm 的部署过程以及相关的配置信息.通过本章内容,帮助读者从零开始搭建一个 Storm 集群. 一.Storm 的依赖组件 1 ...

  5. javascript札记

    bind和unbind对应,live和die对应,千万别用bind绑定,用die解除.还有bind可以多次绑定同一个函数,可能会被执行多次同一个函数 正则表达式的使用 var email_reg = ...

  6. iPhone 物理尺寸与分辨率

    //    iPhone  物理尺寸(pt:Point)   分辨率(px) //    4S        320*480(3.5英寸)     640*960 //    5,5c,5S   32 ...

  7. MFC中不同对话框间使用SendMessage发送自定义消息的具体实现

    1. 基本知识 SendMessage的基本结构如下: SendMessage(     HWND hWnd,  //消息传递的目标窗口或线程的句柄.     UINT Msg, //消息类别(这里可 ...

  8. C++ 中的运算符的优先级

    C++ 中的运算符的优先级 直接看图

  9. 洛谷P3066 [USACO12DEC]逃跑的Barn (线段树合并)

    题目描述It's milking time at Farmer John's farm, but the cows have all run away! Farmer John needs to ro ...

  10. nodejs+express+mysql+handsontable

    介绍:做一个医疗数据分析的系统 现在看是写后端的功能,按照PHP的功能,在node上一个个实现. 1.route引用controller,controller引用model,所以会先执行model可以 ...