题意

题目链接

Sol

设\(solve(x, y)\)表示\(i \in [0, x], j \in [0, y]\)满足题目要求的方案数

首先容斥一下,\(ans = solve(r_1, r_2) - solve(l_1 - 1, r_2) - solve(l_2 - 1, r_1) + solve(l_1 -1, l_2 - 1)\)

然后按照套路按位拆分,这里拆的时候是直接对\(x, y\)进行拆分

这样就把问题转换成了看起来似乎简单一些的问题

假设拆完后的数是

110011101
1011

我们只要对于任意一对为1的位,求出小于该位的所有合法解即可

比如\(i = 3, j = 1\)我们要计算的就是\([110010000, 110010111]\)与\([1000, 1001]\)内的合法解

两种都可以写成\([v, v + 2^k]\)的性质

先考虑一种简单的情况,即\(v = 0\)

假设\(i > j\),那么\(\forall z = x \oplus y \leqslant 2^i\), 对于任意的\(x \leqslant 2^j\),都会有唯一的\(y\)与之对应

那么我们只要数出\([0, 2^i]\)中\(\% M == 0\)的数的个数,再乘上\(2^j\)即可

存在\(a[i]\)的限制实际上是一样的。

但是这样统计到的实际上是开区间的信息,只要在右端点处+1即可

#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
const LL mod = 998244353;
LL l1, r1, l2, r2, M;
LL add(LL x, LL y) {return (x + y >= mod) ? (x + y - mod) : (x + y);
}
LL calc(LL l, LL r) {if(l == 0) return ((r / M) + 1) % mod;return (r / M - (l - 1) / M) % mod;
}
LL solve(LL X, LL Y) {LL ans = 0;for(LL i = 0, p1 = X; p1; i++, p1 >>= 1) {for(LL j = 0, p2 = Y; p2; j++, p2 >>= 1) {if((p1 & 1) && (p2 & 1)) {LL x = i, y = j; if(x < y) swap(x, y);LL ll = ((((p1 ^ 1) << i) ^ ((p2 ^ 1) << j)) >> x) << x;ans = add(ans,  (1ll << y) % mod * calc(ll, ll + (1ll << x) - 1) % mod);//cout << ans << endl;}}}
//  cout << ans << endl;return ans;
}
int main() {cin >> l1 >> r1 >> l2 >> r2 >> M;cout << (solve(r1 + 1, r2 + 1) - solve(l1, r2 + 1) + mod - solve(r1 + 1, l2) + mod + solve(l1, l2) + mod) % mod;return 0;
}
/*
1 1  1 1 1
*/

转载于:https://www.cnblogs.com/zwfymqz/p/9800078.html

牛客提高R5 A.同余方程相关推荐

  1. 牛客NOIP暑期七天营-提高组1

    牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...

  2. 2021牛客OI赛前集训营-提高组(第四场) T2空间跳跃

    2021牛客OI赛前集训营-提高组(第四场) 题目大意 给你三个整数 n , d , l n,d,l n,d,l, n n n为正整数.负整数或0, d , l d,l d,l为正整数,你现在有一个数 ...

  3. 【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

    未完待续... T1:牛牛的方程式 title solution code T2:牛牛的猜数游戏 title solution code T3:牛牛的凑数游戏 title solution code ...

  4. 牛客网NOIP赛前集训营 提高组(第七场)

    中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K ...

  5. [牛客][NOIP2000提高组]乘积最大(Java)(动态规划+高精度)

    原题链接:乘积最大 链接:https://ac.nowcoder.com/acm/problem/16757 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...

  6. 2020牛客NOIP赛前集训营-提高组(第一场) T2 牛牛的猜球游戏

    题目链接: 牛客原站 通过记录: 题目链接2:T277380 牛牛的猜球游戏(被我们搬到洛谷力): 洛谷搬运 题目描述   有十个数 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ...

  7. 牛客小白赛190615场

    夜色已经很晚了,所以我长话短说 1.表单 链接:https://ac.nowcoder.com/acm/contest/917/C 来源:牛客网 输入描述: 第一行两个整数n,Q 后n行每行一个字符串 ...

  8. 8-10 牛客网刷题知识点集合

    在关系代数运算中,五种基本运算为 ? 并.差.选择.投影.笛卡尔乘积      ( + - * 选择 投影) 关于OSI参考模型的描述中,正确的是? 按功能可以分为7个层次 OSI参考模型 自下而上: ...

  9. 牛客练习赛24题解(搜索,DP)

    A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...

最新文章

  1. java难点在哪里_java的难点在哪?
  2. 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看!
  3. 使用python向Redis批量导入数据
  4. php 获取请求,PHP 扩展 - 获取请求信息
  5. mysql 对已有表分区_mysql怎么对先有表进行分区
  6. Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行
  7. 机器学习中的特征建模(特征工程)和算法选型建模 - 以暴力破解识别为例
  8. Mybatis下collections使用pageHelper进行分页
  9. phpstrom 本地编辑玩文件 自动临时映射到远程服务器
  10. 95-270-019-源码-指标监测-常用监控指标
  11. @Autowired 与 @Resource的区别
  12. 华为发布国行版P40系列,售价4188元起;大疆回应“至少50%的裁员清扫计划”;Firefox 75发布 | 极客头条...
  13. PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia)。据说yEd也很不错。...
  14. [转载]MyISAM InnoDB 区别
  15. web安全day35:Linux防火墙进阶
  16. js中java式的类成员
  17. 开发一个app的周期是多长
  18. 机器学习之加州房价预测(一)
  19. 失传千年AE特效真经(三)
  20. 【数据结构与算法】迪杰斯特拉算法的介绍和最短路径问题程序实现

热门文章

  1. 白--留白与游戏设计
  2. 如何脱离SDK,使用DW5.5和phonegap以及JQMobile搭建开发环境
  3. 数据结构之单链表(头结点)的一些常用操作(增删改查逆)
  4. Redis原理及拓展
  5. 【Python3网络爬虫开发实战】4-解析库的使用-3 使用pyquery
  6. 面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?)...
  7. Resharper 安装以及破解
  8. 第三课、Qt的诞生和本质------------------狄泰软件学院
  9. [转载]C#异步委托的用法 .
  10. Android 更改签名