HDU 5269 ZYB loves Xor I (二分法)
题意:
给出一个序列,对每两个数求异或结果后取最低位的1出来作为一个数,然后求这些数字的和。比如:{a,b,c},结果是lowbit(a^b)+lowbit(a^c)+lowbit(b^a)+lowbit(b^c)+lowbit(c^a)+lowbit(c^b)。若不剔除结果为0的,应该有n*n个数的和作为结果。
思路:
试考虑二分法。
观察到可能的取值 lowbit[a]=1,2,4,8....。也就是说最多有29种,结果就是ans=C1*1+C2*2+C3*4+C4*8...。C为个数。可以从这方面下手。
首先序列seq有n个元素,以二进制第1位的不同,将序列分成左右两个集合。那么结果lowbit[]=1的系数C1就是左边个数*右边个数。现在左边集合中的元素的第1位都是0了。接下来要做的就是递归分别处理左边和右边的集合。而a^a肯定是0,不用考虑,也就是数本身不考虑,相等的数也不考虑。主要是复杂度的分析:当序列为自然数序列时,DFS的过程形成了一棵满二叉树,有2*n-1个节点;当数比较集中时,递归层数较多,复杂度O(nlogn)。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
const int mod=;
int ans;
void cal(deque<int> &tmp, int num)
{
deque<int> tmp0,tmp1;
int q=;
while(!tmp.empty())
{
q=tmp.front();
tmp.pop_front();
if((q&(<<num))>) tmp1.push_back(q);
else tmp0.push_back(q);
} ans= (ans+(<<num)*tmp1.size()*tmp0.size())%mod;
if(num>=) return; //大于29位的认同为相同
if(!tmp1.empty()&&tmp1.size()>)
cal(tmp1,num+);
if(!tmp0.empty()&&tmp0.size()>)
cal(tmp0,num+); } int main()
{
//freopen("input.txt", "r", stdin);
int t, j=, n, a;
deque<int> que;
cin>>t;
while(t--)
{
que.clear();
scanf("%d",&n);
for(int i=; i<n; i++)
{
scanf("%d",&a);
que.push_back(a);
}
ans=;
cal(que, );
printf("Case #%d: %d\n",++j,ans*%mod);
}
return ;
} AC代码
AC代码
HDU 5269 ZYB loves Xor I (二分法)的更多相关文章
- hdu 5269 ZYB loves Xor I
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- HDU 5269 ZYB loves Xor I Trie树
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5269 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- hdu 5269 ZYB loves Xor I(字典树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5269 思路分析:当lowbit(AxorB)=2p 时,表示A与B的二进制表示的0-p-1位相等,第p ...
- hdu 5269 ZYB loves Xor I && BestCoder Round #44
题意: ZYB喜欢研究Xor,如今他得到了一个长度为n的数组A. 于是他想知道:对于全部数对(i,j)(i∈[1,n],j∈[1,n]).lowbit(AixorAj)之和为多少.因为答案可能过大,你 ...
- hdu 5269 ZYB loves Xor I 分治 || Trie
题目大意: 长度为\(n\)的数组A.求对于所有数对\((i,j)(i \in [1,n],j \in [1,n])\),\(lowbit(A_i xor A_j)\)之和.答案对998244353取 ...
- 【HDU】5269 ZYB loves Xor I
[算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...
- bestcoder r44 p3 hdu 5270 ZYB loves Xor II
这是昨晚队友跟我说的题,不知道当时是什么玄幻的事件发生了,,我看成了两两相乘的XOR 纠结了好长时间间 不知道该怎么办 今天早上看了下这道题,发现是两两相加的XOR 然后就想了想昨晚的思路 发现可做 ...
- HDU--5269 ZYB loves Xor I (字典树)
题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制 我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...
- ZYB loves Xor I(hud5269)
ZYB loves Xor I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
随机推荐
- 深入浅出ES6(九):学习Babel和Broccoli,马上就用ES6
作者 Jason Orendorff github主页 https://github.com/jorendorff 现在,我们将向你分步展示如何做到的这一切.上面提及的工具被称为转译器,你可以将它 ...
- Ajax的进阶学习(二)
JSON和JSONP 如果在同一个域下,$.ajax()方法只要设置dataType属性即可加载JSON文件.而在非同域下,可以使用JSONP,但也是有条件的. Ajax进阶.html: <!D ...
- P2P通信标准协议(一)之STUN
前一段时间在P2P通信原理与实现中介绍了P2P打洞的基本原理和方法,我们可以根据其原理为自己的网络程序设计一套通信规则, 当然如果这套程序只有自己在使用是没什么问题的.可是在现实生活中,我们的程序往往 ...
- Maven的安装
我对maven的了解,仅仅局限在百度百科. 由于近期公司需求,我找到了个maven教程:http://wentao365.iteye.com/blog/903396 安装maven其实很简单,就是在A ...
- 使用xshell链接本地虚拟机中的Linux
昨天想在自己机器上安装一下Linux,并使用xshell访问,可是费了很长时间,在xshell端都提示“Could not connect to '192.168.54.100' (port 22): ...
- ios开发--animation flash动画
/** * showAnimationFlash */ + (void)showAnimationFlashWithView:(UIView *)animationView durati ...
- 拥有更好性能的requesAnimationFrame(Better Performance with requestAnimationFrame)
介绍: 这篇文章讨论的是你可以(也应该)学习通过使用requestAnimationFrame API,而不是使用之前的setInterval/setTimeout方法,来提高动画的性能:如何使用re ...
- .NET责任链模式(混合单例模式,模板方法模式)-----制作与扩展能力验证
.NET责任链模式.单例模式.模板方法模式混用 前言 哇,看到题目挺长的,这个组合型的东西,到底能干啥呢?本篇文章来一起琢磨琢磨,这两天为了团队的软件赶工,我负责的那一块叫:插件管理器.我们团队的成员 ...
- struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...
- c# ffmpeg常用参数
c# ffmpeg常用参数 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 ...