2022春每日一题:Day 34

题目:lowbit求和 (没有找到哪个公开题库有这个题)
题意:求数组中任意一对数的异或和的lowbit的总和。
对于异或,二进制位中两个数相等则为0,反之为1,而且此题是要求lowbit,那我们利用这个,对于一个数字,他第i位二进制位k,则显然跟这个数字二进制前缀相同的数与这个数异或起来都是0,但是第i位二进制位为k^1,则这一定是其中的一个贡献,抓住这一点,就可以以二进制位建trie树,然后解决这个问题。
注意,不开longlong见祖宗,开了longlong还是见祖宗,所以部分开
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
const int N=1e5+5;
const long long pp=199907210507;
using namespace std;
int n,tot;
long long ret,a[N];
namespace trietree
{
struct trie
{
int son[2];
long long tag[2];
}e[N*61];
void insert(long long x)
{
int p=0;
for(int i=0;i<=60;i++)
{
int k=x>>i&1;
e[p].tag[k]++;
if(!e[p].son[k])
e[p].son[k]=++tot;
p=e[p].son[k];
}
}
int query(long long x)
{
int p=0;
long long ans=0;
for(int i=0;i<=60;i++)
{
int k=x>>i&1;
ans=(ans+(1LL<<i)%pp*e[p].tag[k^1]%pp)%pp;
p=e[p].son[k];
}
return ans;
}
}
using namespace trietree;
signed main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]),insert(a[i]);
for(int i=1;i<=n;i++)
ret=(query(a[i])+ret)%pp;
printf("%lld\n",ret);
return 0;
}
2022春每日一题:Day 34的更多相关文章
- 老男孩IT教育-每日一题汇总
老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...
- 【python】Leetcode每日一题-最大数
[python]Leetcode每日一题-最大数 [题目描述] 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你需要返回一个 ...
- 【Java每日一题】20170106
20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170105
20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170104
20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20170103
20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- 【Java每日一题】20161230
// 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...
- 【Java每日一题】20161229
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...
- 【Java每日一题】20161228
package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...
- 【Java每日一题】20161227
package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...
随机推荐
- K8S Pod及其控制器
Pod K8S里能够运行的最小逻辑单元,1个Pod可以运行多个容器 Pod 控制器 Pod控制器是Pod启动的一种模版,用来保证在K8S中启动的Pod始终按照人们的预期运行(副本数,生命周期.健康状态 ...
- LFS(Linux From Scratch)构建过程全记录(五):交叉工具链的构建
写在前面 本文将详细讲述如何构建工具链 前置知识 在LFS-BOOK中,我们需要学习一些关于"交叉编译"的内容,详见书本 安装Binutils-2.39 我们cd到sources文 ...
- kibana配置文件kibana.yml参数详解
server.port: 默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号. server.host: 默认值: "localhost" 指定后端服务 ...
- docker-compose安装harbor
目录 Harbor 安装环境说明 获取安装包(离线安装方式) 安装harbor 用docker-compose查看Harbor容器的运行状态 Harbor访问测试 上传镜像到Harbor服务器 Har ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
- SonarQube 插件之 Issues Report & SonarLint 的配置及使用
转载自:https://cloud.tencent.com/developer/article/1010599 1.Issues Report Plugins 介绍 使用 Issues Report ...
- prettierrc格式化常用配置
#最大长度 printWidth: 140 #单引号 singleQuote: true tabWidth: 2 useTabs: false # 句尾添加分号 semi: false # js an ...
- Jupyter notebook导入Pycharm项目的.py文件里的模块及方法
Jupyter notebook导入Pycharm项目种的.py文件里的模块及方法 需要在Jupyter notebook里调用自己写的代码,过程如下. 首先在Pycharm里写好一个文件,例如DCC ...
- Java程序设计(二)作业
题目1:输入一个三位十进制数,对其每一位进行筛选,逆序组合后输出. package test; import java.util.*; public class test2{ public stati ...
- C++/python求哈希值(SHA256)
发现一个很奇怪的现象: python语言求哈希值所用时间竟然比C++少: C++ code 1 #include "stdafx.h" 2 #include <windows ...