Masked Popcount 题解
背景
罚了一发,太菜了。为什么我终于有时间的时候她要考试?
题意
给你 \(n,m\),问 \(\sum_{i=0}^{n}popcount(i \&m)\)。
其中 \(\&\) 代表位运算,\(popcount\) 代表一个数字二进制下 \(1\) 的个数。
分析
两个数字在二进制下根据数据范围有 \(60\) 位。所以我们考虑每一位对答案的贡献。
先把 \(m\) 变成二进制存到数组里面,根据题意能产生贡献的数位只能是 \(1\)。那么题目就变成了 \(0\sim n\) 中有多少个数字的指定数位为 \(1\)。
我们可以先看一下:
000
001
010
011
100
101
110
111
容易得到规律:数位 \(i\) 从小到大中 \(0\) 和 \(1\) 按照长度为 \(2^i\) 循环节交替出现,并且每个循环节中 \(1\) 出现次数为 \(2^{i-1}\)。
因此可以得到算法:计算 \(n\) 中出现了几次循环节,并把多余的部分判断是否大于该数位循环节长度的一半,如果是,加上剩余值与一半的差即可。
Code
#include<bits/stdc++.h>
//#include<atcoder/modint>
#define int long long
using namespace std;
//using mint=atcoder::modint998244353;
inline int read()
{
int w=1,s=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
return w*s;
}
const int maxn=1e6+10;
int mod=998244353;
int n,m;
int ans=0;
int cntm[maxn],totm;
void pre(int x)
{
while(x)
{
int t=x%2;
if(t)cntm[++totm]=1;
else cntm[++totm]=0;
x>>=1;
}
}
signed main()
{
// freopen("xxx.in","r",stdin);
// freopen("xxx.out","w",stdout);
cin>>n>>m;
if(n==0||m==0)return 0*printf("0");
pre(m);
for(int i=1;i<=totm;i++)
{
if(!cntm[i])continue;
int qw=pow(2,i-1),xun=pow(2,i);
ans=(ans+qw*((n+1)/xun))%mod;
int nn=(n+1)%xun;
if(nn>xun/2)ans=(ans+nn-xun/2)%mod;
}
cout<<ans%mod;
return 0;
}
完结撒花
Masked Popcount 题解的更多相关文章
- 算法(第四版)C# 习题题解——2.2
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:http ...
- 算法(第四版)C# 习题题解——1.3
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- 2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解
2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...
- 题解-CF429C Guess the Tree
题面 CF429C Guess the Tree 给一个长度为 \(n\) 的数组 \(a_i\),问是否有一棵树,每个节点要么是叶子要么至少有两个儿子,而且 \(i\) 号点的子树大小是 \(a_i ...
- 「题解」agc031_c Differ by 1 Bit
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 AT4693.AtCoder agc031_c. 题意概述 给定三个数 \(n,a,b\),求一个 \(0\sim ...
- 洛谷 P5627 题解
题意 Link 求 \[\sum_{i=1}^{2^n}\log_2\left(\prod_{j=1}^i\operatorname{lowbit}(j)\right) \] \(n\le 2^{64 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
随机推荐
- 环境变量管理工具Modules的安装
一.软件依赖tcl软件 (1)tcl下载地址:http://www.tcl-lang.org/software/tcltk/(2)编译安装 cd unix/ ./configure --prefix= ...
- 【题解】P2627 [USACO11OPEN] Mowing the Lawn G
[题解]P2627 [USACO11OPEN] Mowing the Lawn G 题目跳转 数据量比较大,暴力肯定是不行的.只能考虑用动态规划的方式来做. 这道题有许多dp设计的思路,这里提供两个: ...
- nohup Command [ Arg … ] [ & ]
nohup 英文全称:no hang up 不挂断的意思.退出终端不挂断程序的运行.在默认的情况下,会输出一个名叫 nohup.out 的文件到当前目录下.nohup Command [ Arg - ...
- Vue cli之单文件组件
组件有两种:脚本化组件.单文件组件 脚本化组件的缺点: html代码是作为js的字符串进行编写,所以组装和开发的时候不易理解,而且没有高亮效果. 脚本化组件用在小项目中非常合适,但是复杂的大项目中,如 ...
- Android 13 - Media框架(11)- MediaCodec(一)
关注公众号免费阅读全文,进入音视频开发技术分享群! MediaCodec 是 Android 平台上音视频编解码的标准接口,无论是使用软解还是硬解都要通过调用 MediaCodec来完成,是学习 An ...
- MVCC(多版本并发控制)详解
在 MySQL InnoDB存储引擎下,RC.RR 基于 MVCC 进行并发事务控制, MVCC 是基于"数据版本"对并发事务进行访问 用一个例子来解释一下,下面是一张事务执行流程 ...
- itest(爱测试) 4.5.2 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理4合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代(含任务, ...
- vue带有参数的路由跳转 动态路由
先定义好路由在router文件下面创建一个新的文件夹里面写上自己定义的路由 export default { path: '/detail/:id', component: () => ...
- 绑定style
² 对象语法 <div:style="{color: redColor, fontSize: '20px'}">对象写法</div> data: { red ...
- WIN11 Windows 11 安装过程中如何跳过强制联网
WIN11 Windows 11 安装过程中如何跳过强制联网.22H2. 在要求联网的页面中按下 "Shift+F10"调出命令行窗口,再输入"OOBE\BYPASSNR ...