背景

罚了一发,太菜了。为什么我终于有时间的时候她要考试?

题意

给你 \(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 题解的更多相关文章

  1. 算法(第四版)C# 习题题解——2.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:http ...

  2. 算法(第四版)C# 习题题解——1.3

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...

  3. 2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解

    2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...

  4. 题解-CF429C Guess the Tree

    题面 CF429C Guess the Tree 给一个长度为 \(n\) 的数组 \(a_i\),问是否有一棵树,每个节点要么是叶子要么至少有两个儿子,而且 \(i\) 号点的子树大小是 \(a_i ...

  5. 「题解」agc031_c Differ by 1 Bit

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 AT4693.AtCoder agc031_c. 题意概述 给定三个数 \(n,a,b\),求一个 \(0\sim ...

  6. 洛谷 P5627 题解

    题意 Link 求 \[\sum_{i=1}^{2^n}\log_2\left(\prod_{j=1}^i\operatorname{lowbit}(j)\right) \] \(n\le 2^{64 ...

  7. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  8. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  9. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  10. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

随机推荐

  1. IIS 部署 Python 环境

    1.安装IIS 勾选特殊CGI程序2.Python 环境 (环境变量配置)3.如果没有pip命令 先下载安装pip python setup.py install4.pip install wfast ...

  2. 解密Prompt系列30. LLM Agent之互联网冲浪智能体

    这一章我们介绍能自主浏览操作网页的WebAgent们和相关的评估数据集,包含初级任务MiniWoB++,高级任务MIND2WEB,可交互任务WEBARENA,多模态WebVoyager,多轮对话Web ...

  3. Web Service和Web API理解和使用场景

    Web Service 理解:Web Service 是一种基于网络的服务,它使用标准化的消息传递协议,最典型的是基于 SOAP(Simple Object Access Protocol)协议.SO ...

  4. 手写Word2vec算法实现

    1. 语料下载:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 [中文维基百科语料] 2. ...

  5. 【论文笔记】R-CNN系列之代码实现

    代码源码 前情回顾:[论文笔记]R-CNN系列之论文理解 整体架构 由三部分组成 (1)提取特征的卷积网络extractor (2)输入特征获得建议框rois的rpn网络 (3)传入rois和特征图, ...

  6. uniapp 小程序分享功能

    上个月在做小程序的项目时,甲方需要给小程序添加个分享的功能,查看uniapp官方文档后,发现uniapp有自带的小程序分享功能(https://uniapp.dcloud.io/api/plugins ...

  7. 电脑网卡把报文的vlan tag去掉

    1 现象 现象说明:从电脑的网卡(用的Realtek)进来一个带vlan tag的报文,但是使用wireshark抓取的报文没有vlan tag. 解决方式如下:需要注册表. 参考链接1:https: ...

  8. 不挑电脑安装 WIndows11 用 Rufus这个软件

    下 Rufus 找一个U盘先别动 然后去夸克网盘下载 windows11 24h2 iso 版本的安装文件,陶10块钱加速下载下来 然后安装Rufus 然后使用这个启动盘制作工具选择下载好的 iso原 ...

  9. ES Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed

    查看日志切分:sed -n '/2022-03-21 01:50:11.785/,/2022-03-21 02:25:01.130/p' test-2022-03-21-1.log > 2203 ...

  10. idea文件的编码设置,解决中文编码不一致问题,对RSA验签及文本比较的测试方法 -Dfile.encoding=UTF-8

    String reqContent = "abcdef中文"; //new String("abcdefee".getBytes()," GBK &q ...