异或求和式 数位dp
异或求和式
给定长度为n的序列A[i],求所有A[i] xor A[j] (i<j)的值之和
输入
第一行一个整数N
接下来N行,第i行为A[i]
输出
所需的值
样例输入
3
7
3
5
样例输出
12
样例解释
7 xor 3+3 xor 5+7 xor 5 = 4+6+2 = 12
先把数字都化成二进制,7:111, 3:011, 5:101,注意到异或具有交换律,也就是说只要能够使得任意两个数字都异或一次,就没有必要每次用前面的数字异或后面的数字。这启发我们不关注异或的顺序,而是关注结果。
易知:a个1,b个0两两异或的结果肯定是a*b个1,其余都是0。
三个数字的最低位分别是1,1,1,也就是三个1。那么最低位异或的结果一定是零个1,三个0,相加为0。
次低位分别是1,1,0,也就是两个1一个0。那么次低位异或的结果一定是两个1,一个0,相加为2。
最高位分别是1,0,1,也就是两个1一个0。那么最高位异或的结果一定是两个1,一个0,相加为2。
所以最后的答案应该是
代码如下:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>using namespace std;typedef long long int ll;
const int MAX_SIZE = 100;
int dp[MAX_SIZE], n;int main()
{//freopen("test.txt", "r", stdin);scanf("%d", &n);memset(dp, 0, sizeof(dp));for (int i = 1; i <= n; i++){int t;scanf("%d", &t);int cnt = 0;while (t){cnt++;if (t % 2)dp[cnt]++;t /= 2;}}int ans = 0;for (int i = 0; i < 31; i++)ans += (1 << i) * dp[i + 1] * (n - dp[i + 1]);printf("%d\n", ans);return 0;
}
异或求和式 数位dp相关推荐
- 数位dp(求1-n中数字1出现的个数)
题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...
- BZOJ 3329 Xorequ (数位DP、矩阵乘法)
BZOJ 3329 Xorequ (数位DP.矩阵乘法) 手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/arti ...
- FZU - 2042 The Mad Mathematician(数位dp)
题目链接:点击查看 题目大意:给出 A,B,C,D,EA,B,C,D,EA,B,C,D,E,求 sumsumsum 题目分析:数位dp,开五维维护一下状态即可,简单说一下 dpdpdp 的状态: dp ...
- [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]
DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...
- Bzoj 3652: 大新闻(数位dp)
以下内容来自ShallWe's Blog 题目 3652: 大新闻 Description Input Output \(1<=N<=10^18\) 解题报告 显然是一道数位dp的题目,观 ...
- HDU 5598:GTW likes czf 敲了一天的数位DP
GTW likes czf Accepts: 6 Submissions: 29 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
- 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)
1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2774 Solved: 1230 [Submit ...
- 不要62 ---数位DP
题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...
- cojs 简单的数位DP 题解报告
首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...
最新文章
- MyEclipse部署Tomcat服务器时总是跳到Debug模式
- protobuf message定义_ProtoBuf 协议设计与开发
- c语言课后题2.52.8答案,C语言练习题(8)-只要答案不要分析,要速度,要正确51.(1 爱问知识人...
- 518. 零钱兑换 II golang动态规划
- 诺基亚7原生android,【诺基亚7Plus评测】系统:简洁原生安卓功能却不简单_诺基亚 7 Plus(4GB RAM/全网通)_手机评测-中关村在线...
- linux内核支持2t,Linux 支持2T磁盘分区
- 朴素贝叶斯分类器的python实现
- Go语言实现线程安全访问队列
- android studio 导入c,3.3、Android Studio 添加 C 和 C++ 项目
- paip.验证码识别---图像处理类库
- windows黑客编程系列(二):DLL延迟加载和资源释放
- 单片机编程:软件定时器
- 路由交换技术中生成树协议
- 文件同步工具Unison
- Camunda流程引擎事件(Events)介绍
- 【postgres】源码结构
- 【C语言】函数详解第一期,函数基础
- 蓝牙耳机品牌推荐:2023年口碑最好的蓝牙耳机品牌排行
- 万豪国际集团推出“双十一”多样化旅行套餐产品
- 聚合数据api的使用