牛客提高R5 A.同余方程
题意
题目链接
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.同余方程相关推荐
- 牛客NOIP暑期七天营-提高组1
牛客NOIP暑期七天营-提高组1 链接 A 边权可为0就排序建一条链子. 但是边权不为0 除了第一个有0的不行. x连向上一个比他小的数. 期间判断有无解. #include <bits/std ...
- 2021牛客OI赛前集训营-提高组(第四场) T2空间跳跃
2021牛客OI赛前集训营-提高组(第四场) 题目大意 给你三个整数 n , d , l n,d,l n,d,l, n n n为正整数.负整数或0, d , l d,l d,l为正整数,你现在有一个数 ...
- 【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)
未完待续... T1:牛牛的方程式 title solution code T2:牛牛的猜数游戏 title solution code T3:牛牛的凑数游戏 title solution code ...
- 牛客网NOIP赛前集训营 提高组(第七场)
中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K ...
- [牛客][NOIP2000提高组]乘积最大(Java)(动态规划+高精度)
原题链接:乘积最大 链接:https://ac.nowcoder.com/acm/problem/16757 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144 ...
- 2020牛客NOIP赛前集训营-提高组(第一场) T2 牛牛的猜球游戏
题目链接: 牛客原站 通过记录: 题目链接2:T277380 牛牛的猜球游戏(被我们搬到洛谷力): 洛谷搬运 题目描述 有十个数 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ...
- 牛客小白赛190615场
夜色已经很晚了,所以我长话短说 1.表单 链接:https://ac.nowcoder.com/acm/contest/917/C 来源:牛客网 输入描述: 第一行两个整数n,Q 后n行每行一个字符串 ...
- 8-10 牛客网刷题知识点集合
在关系代数运算中,五种基本运算为 ? 并.差.选择.投影.笛卡尔乘积 ( + - * 选择 投影) 关于OSI参考模型的描述中,正确的是? 按功能可以分为7个层次 OSI参考模型 自下而上: ...
- 牛客练习赛24题解(搜索,DP)
A题,C题不讲,基础题(但是我要抨击一下这次比赛,卡cin,cout,卡的太狠了,根本就不让过的那种,QAQ) 链接:https://www.nowcoder.com/acm/contest/157/ ...
最新文章
- java难点在哪里_java的难点在哪?
- 这 10 行比较字符串相等的代码给我整懵了,不信你也来看看!
- 使用python向Redis批量导入数据
- php 获取请求,PHP 扩展 - 获取请求信息
- mysql 对已有表分区_mysql怎么对先有表进行分区
- Windows10+VS2017下GSL1.8_x86和sundials2.5.0配置及GITHUB项目schneider_et_al_2016_animaldiversity编译运行
- 机器学习中的特征建模(特征工程)和算法选型建模 - 以暴力破解识别为例
- Mybatis下collections使用pageHelper进行分页
- phpstrom 本地编辑玩文件 自动临时映射到远程服务器
- 95-270-019-源码-指标监测-常用监控指标
- @Autowired 与 @Resource的区别
- 华为发布国行版P40系列,售价4188元起;大疆回应“至少50%的裁员清扫计划”;Firefox 75发布 | 极客头条...
- PS2: 这篇文章中的图片绘图工具使用的是Dia (sudo apt-get install dia)。据说yEd也很不错。...
- [转载]MyISAM InnoDB 区别
- web安全day35:Linux防火墙进阶
- js中java式的类成员
- 开发一个app的周期是多长
- 机器学习之加州房价预测(一)
- 失传千年AE特效真经(三)
- 【数据结构与算法】迪杰斯特拉算法的介绍和最短路径问题程序实现
热门文章
- 白--留白与游戏设计
- 如何脱离SDK,使用DW5.5和phonegap以及JQMobile搭建开发环境
- 数据结构之单链表(头结点)的一些常用操作(增删改查逆)
- Redis原理及拓展
- 【Python3网络爬虫开发实战】4-解析库的使用-3 使用pyquery
- 面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?)...
- Resharper 安装以及破解
- 第三课、Qt的诞生和本质------------------狄泰软件学院
- [转载]C#异步委托的用法 .
- Android 更改签名