牛客提高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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移植U-Boot思路和实践 | 基于RK3399

0. 背景介绍我们手里这块RK3399开发板出厂时带的是2017.09版本的U-Boot。U-Boot 2017.09 (Sep 26 2021 - 08:53:15 0000)Model: Forlinx OK3399 Evaluation Board PreSerial: 2 DRAM: 2 GiB Sysmem: init Relocation Offset is: 7dbe9000 Using default environment在这个基础…

mysql 查询 集合_MySQL使用集合函数进行查询操作实例详解

本文实例讲述了MySQL使用集合函数进行查询操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a;COUNT函数SELECT COUNT(*) AS cust_num from customers;SELECT COUNT(c_email) AS email_num FROM customers;SELECT o_num, COUNT(f_id) FROM orderitems GROUP BY o_num;…

一起谈.NET技术,WPF 基础到企业应用系列5——WPF千年轮回2

一&#xff0c;摘要 首先很高兴这个系列能得到大家的关注和支持&#xff0c;前端时间身体状况不适&#xff0c;所以暂停了更新&#xff0c;对此表示非常抱歉&#xff0c;以后会逐渐加快进度&#xff0c;不过由于这是一个很长的系列&#xff0c;我也想把它写好&#xff0c;所以以…

排序算法之希尔排序(Java)

希尔排序 平均时间复杂度&#xff1a;O(nlogn) 不稳定的排序算法 v[0]与v[0n/2]比较&#xff0c;v[1]与v[1n/2]比较&#xff0c;v[2]与v[2n/2]比较&#xff0c;小的放到前面&#xff0c;以此类推.............. 关键部分代码如下&#xff1a; public static void shell_so…

AOP和IOC

AOP切面编程&#xff0c;作用&#xff1a;事务&#xff0c;日志&#xff0c;统一调用&#xff0c;统一实现&#xff0c;拦截,分发&#xff1b; 切点&#xff1a;告诉编译器切面作用于哪个package中的class IOC&#xff1a;控制反转&#xff0c;相对于new 对象来说的&#xff0c…

手把手教你|拦截系统调用

一、什么是系统调用系统调用 是内核提供给应用程序使用的功能函数&#xff0c;由于应用程序一般运行在 用户态&#xff0c;处于用户态的进程有诸多限制&#xff08;如不能进行 I/O 操作&#xff09;&#xff0c;所以有些功能必须由内核代劳完成。而内核就是通过向应用层提供 系…

mysql修改列明sql语句_SqlServer修改表名、修改列名T-SQL语句

前面介绍了SQL基本用法《MSSQL数据库常见操作 SQL语句》,但是没有介绍sql修改表的相关操作,本篇文章将介绍T-SQL修改表的相关操作。1。修改表名:execute sp_rename department.mgrig ,mgrid;详述:EXEC sp_rename 表名.[原列名], 新列名, columnTransact-SQL参考sp_rename----…

求2个数的最大公约数

求2个数的最大公约数 该方法只适用于部分数 int gongyueshu(int m, int n) {if ((0 m) || (0 n)){return 0;}while (n)//考虑到n是负数{int temp n;n m % n;m temp; }return m; }

[转载]C 指针

一、认识存储单元指针是C语言最显著的特色。要理解指针的概念&#xff0c;需要先理解计算机读写内存的的方式以及变量的概念。计算机内存是以字节为单位划分内存单元的&#xff0c;每个内存单元占用一个字节&#xff0c;每个内存单元都有自己的地址编号&#xff0c;操作系统或软…

公司年会

没有抽奖的年会肯定是不完美的。有抽奖没有饭局的年会也是很香的。因为疫情&#xff0c;我们没有年终饭局&#xff0c;我也不知道过去那些年腾讯是怎么开年会的&#xff0c;不过今年&#xff0c;我觉得挺不错。上周我们搞了年终活动&#xff0c;我那时候还在开会&#xff0c;CG…

MySQL函数笔记_MySQL笔记之数学函数详解

绝对值函数ABS(x)和圆周率函数PI()复制代码 代码如下:mysql> SELECT ABS(0.5), ABS(-0.5), PI();-------------------------------| ABS(0.5) | ABS(-0.5) | PI() |-------------------------------| 0.5 | 0.5 | 3.141593 |-------------------------------…

给年薪不到48w的程序员提个醒!!

近日&#xff0c;一程序员在脉脉自曝“年薪37W带12人团队&#xff0c;因学历内推腾讯被拒”&#xff0c;引发争议。末流院校&#xff0c;带12人前端团队&#xff0c;到手37w股票20w&#xff0c;过硬的编程技术让他觉得可以出去“闯闯”&#xff1b;内推到腾讯&#xff0c;电话里…

POLYCOM RMX2000 激活与初始化 信令板卡初始化

POLYCOM RMX2000 激活与初始化 信令板卡初始化 上个星期跟组长去建行升级RMX2000的时候遇到的问题就是系统起来后&#xff0c;在“硬件监视器”下可以找到MPMx板卡&#xff0c;但是系统的“IP 网络服务”里面找不到信令板卡。 刚开始以为是板卡激活出现问题&#xff0c;重复了几…

实验二 网络嗅探与欺骗

实验二 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告 实验二 网络嗅探与欺骗 学生姓名 张昊 年级 2015 区队 三 指导教师 高见 信息技术与网络安全学院 2018年9月25日 实验任务总纲 2018—20179学年 第 一 学期 一、实验目…

年终奖

我一个人走在路上&#xff0c;想说点什么&#xff0c;我觉得很难受&#xff0c;去年这个时候我一个高中同学跟我聊天&#xff0c;他跟我说「我听说你们在深圳做程序员的工资很高&#xff0c;我认识的一个朋友在深圳一个月2万多&#xff0c;年终奖发了十几万」。我想&#xff0c…

python barrier_Python线程障碍对象Barrier原理详解

python线程Barrier俗称障碍对象&#xff0c;也称栅栏&#xff0c;也叫屏障。一.线程障碍对象Barrier简介# 导入线程模块import threading# 障碍对象barrierbarrier threading.Barrier(parties, actionNone, timeoutNone)parties — 线程计数器&#xff0c;记录线程数量&#x…

Spring AOP 五大通知类型

1.前置通知 在目标方法执行之前执行执行的通知。 前置通知方法&#xff0c;可以没有参数&#xff0c;也可以额外接收一个JoinPoint&#xff0c;Spring会自动将该对象传入&#xff0c;代表当前的连接点&#xff0c;通过该对象可以获取目标对象 和 目标方法相关的信息。 注意&…

转载CSDN博文精选:Android系列开发博客资源汇总

CSDN博客本期热文推荐&#xff0c;为您介绍有关Android应用开发的10个博客&#xff0c;分享他们的日积月累的宝贵经验&#xff0c;希望这些文章对Android开发者们能有所启发和帮助。 [1] 张国威&#xff1a;Android从入门到提高系列 前面写了十四篇关于界面的入门文章&#xff…

简单工厂模式+工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; …

Windows下搭建ESP-IDF开发环境,适合ESP32/S2/C3/S3系列模组二次开发

前言本教程适用于以下两种用户&#xff1a;①无Linux环境搭建经验或搭建Linux开发环境不成功&#xff1b;②使用安信可windows一体化环境IDE V1.5开发环境搭建不成功&#xff1b;本教程提供了windows下搭建 ESP-IDF 开发环境的方法。适用系统&#xff1a;Windows 10 64 位版本、…