背景

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

题意

给你 \(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. Android 13 - Media框架(31)- ACodec(七)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 之前的章节中我们解了 input buffer 是如何传递给 OMX 的,以及Output buffer 是如何分配并且注册给 OMX 的.这一节我 ...

  2. 来自多彩世界的控制台——C#控制台输出彩色字符画

    引言 看到酷安上有这样一个活动,萌生了用 C# 生成字符画的想法,先放出原图.   酷安手绘牛啤     §1 黑白 将图像转换成字符画在 C# 中很简单,思路大致如下: 加载图像,逐像素提取明度. ...

  3. Dump Rtmp Audio Stream To AAC Formate File (从Rtmp流提取并保存AAC音频文件)

    一.准备工作 参考:https://www.cnblogs.com/doudouyoutang/p/10220599.html 搭建本地rtmp服务: https://www.cnblogs.com/ ...

  4. itest(爱测试)开源接口测试&敏捷测试&极简项目管理 7.7.7 发布,接口测试重大升级

    (一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包 ...

  5. itest(爱测试) 4.5.7 发布,开源BUG 跟踪管理 & 敏捷测试管理&极简项目管理软件

    itest 简介 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试5合1,又有丰富的统计分析.可按测试包分配测试用例执行,也可建测试迭代 ...

  6. uniapp 输入有值后按钮变色

    我们在开发中难免会遇到一些登录注册输入框中的值为空时,按钮的状态变成为不可点击的状态,当输入框有值后就把按钮变为可点击的状态 代码部分: <input placeholder="请输入 ...

  7. Apache 服务搭建

    Apache 一.了解apache Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http(Hypertext Transfer Protocol), ...

  8. Qt--ui的简单使用(1)

    1  说明 本文主要介绍Qt ui界面的简单使用. 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=22 2  工程创建 创建工程时,把创建界面给 ...

  9. python安装OCR识别库

    (1)安装过程 参考的这个博客:https://blog.csdn.net/lanxianghua/article/details/100516187?depth_1-utm_source=distr ...

  10. pandas基础--基本功能

    pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas as pd,另外import numpy ...