异或求和式

给定长度为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相关推荐

  1. 数位dp(求1-n中数字1出现的个数)

    题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...

  2. BZOJ 3329 Xorequ (数位DP、矩阵乘法)

    BZOJ 3329 Xorequ (数位DP.矩阵乘法) 手动博客搬家: 本文发表于20181105 23:18:54, 原地址https://blog.csdn.net/suncongbo/arti ...

  3. FZU - 2042 The Mad Mathematician(数位dp)

    题目链接:点击查看 题目大意:给出 A,B,C,D,EA,B,C,D,EA,B,C,D,E,求 sumsumsum 题目分析:数位dp,开五维维护一下状态即可,简单说一下 dpdpdp 的状态: dp ...

  4. [SOCI2005]最大子矩阵(DP) + [JXOI2018]守卫(DP) + [CQOI2016]手机号码(数位DP)[各种DP专练]

    DP专练博客 DP专练 T1:最大子矩阵 题目 题解 代码实现 T2:守卫 题目 题解 代码实现 T3:手机号码 题目 题解 代码实现 T1:最大子矩阵 题目 这里有一个n*m的矩阵,请你选出其中k个 ...

  5. Bzoj 3652: 大新闻(数位dp)

    以下内容来自ShallWe's Blog 题目 3652: 大新闻 Description Input Output \(1<=N<=10^18\) 解题报告 显然是一道数位dp的题目,观 ...

  6. HDU 5598:GTW likes czf 敲了一天的数位DP

    GTW likes czf  Accepts: 6  Submissions: 29  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 13 ...

  7. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  8. 不要62 ---数位DP

    题意:求m到n中不含62和4的数的个数. 题目链接 思路:数位dp模板求满足的数字或不满足的数字,刚学,就求不满足的数. #include<stdio.h> #include<str ...

  9. cojs 简单的数位DP 题解报告

    首先这道题真的是个数位DP 我们考虑所有的限制: 首先第六个限制和第二个限制是重复的,保留第二个限制即可 第五个限制在转移中可以判断,不用放在状态里 对于第一个限制,我们可以增加一维表示余数即可 对于 ...

最新文章

  1. MyEclipse部署Tomcat服务器时总是跳到Debug模式
  2. protobuf message定义_ProtoBuf 协议设计与开发
  3. c语言课后题2.52.8答案,C语言练习题(8)-只要答案不要分析,要速度,要正确51.(1 爱问知识人...
  4. 518. 零钱兑换 II golang动态规划
  5. 诺基亚7原生android,【诺基亚7Plus评测】系统:简洁原生安卓功能却不简单_诺基亚 7 Plus(4GB RAM/全网通)_手机评测-中关村在线...
  6. linux内核支持2t,Linux 支持2T磁盘分区
  7. 朴素贝叶斯分类器的python实现
  8. Go语言实现线程安全访问队列
  9. android studio 导入c,3.3、Android Studio 添加 C 和 C++ 项目
  10. paip.验证码识别---图像处理类库
  11. windows黑客编程系列(二):DLL延迟加载和资源释放
  12. 单片机编程:软件定时器
  13. 路由交换技术中生成树协议
  14. 文件同步工具Unison
  15. Camunda流程引擎事件(Events)介绍
  16. 【postgres】源码结构
  17. 【C语言】函数详解第一期,函数基础
  18. 蓝牙耳机品牌推荐:2023年口碑最好的蓝牙耳机品牌排行
  19. 万豪国际集团推出“双十一”多样化旅行套餐产品
  20. 聚合数据api的使用

热门文章

  1. yum卸载任何软件程序
  2. UVA 716 - Commedia dell' arte(三维N数码问题)
  3. js小数失真问题---乘以100或除以100之后保留两位小数
  4. 非常详细的启动光盘制作教程-菜鸟版
  5. 华为首席开源联络官任旭东:业务和战略驱动华为拥抱开源
  6. 如何避免SCI写作中的中式思维以及无处不在的Chinglish
  7. insert主键返回 selectKey使用
  8. openstack国内源
  9. Android exfat移植指南
  10. vue---组件化开发