hdu5269 ZYB loves Xor I
分治法和字典树都可以,都是递归,但字典树耗内存
从第一bit开始,若相同则xor为0,分到同一部分,不相同则统计,且此时lowbit为这一bit,最后结果要乘以2
/*分治法*/
#include<cstdio>
#define MOD 998244353 using namespace std; int a[],t[],T,cas=,n,sum; void fenzhi(int l,int r,int mask)
{
if(r-l<=||mask==<<) return;
int i,j=l,k=r-;
for(i=l;i<r;i++)
{
if(a[i]&mask) t[j++]=a[i];
else t[k--]=a[i];
}
sum=(sum+(long long)(j-l)*(r-j)*mask)%MOD;
for(i=l;i<r;i++) a[i]=t[i];
fenzhi(l,j,mask<<);
fenzhi(j,r,mask<<);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&a[i]);
sum=;
fenzhi(,n,);
printf("Case #%d: %d\n",cas++,(sum*)%MOD);
}
return ;
}
/*字典树*/
#include <iostream>
#include<cstdio>
#include<cstring>
#define MOD 998244353 using namespace std; struct Node
{
int num;
int left,right;
};
Node node[];
int T,n,a,idx,sum,cas=; void insert(int a)
{
int root=,mask=;
for(int i=;i<;i++)
{
if(a&mask)
{
int &u=node[root].left;
if(!u) u=idx++;
node[u].num++;
root=u;
}
else
{
int&u=node[root].right;
if(!u) u=idx++;
node[u].num++;
root=u;
}
mask<<=;
}
} void dfs(int x,int depth)
{
if(node[x].num<=) return;
sum=(sum+(long long)node[node[x].left].num*node[node[x].right].num*(<<depth))%MOD;
dfs(node[x].left,depth+);
dfs(node[x].right,depth+);
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(node,,sizeof(node[])*n*);
idx=;
node[].num=n;
for(int i=;i<n;i++)
{
scanf("%d",&a);
insert(a);
}
sum=;
dfs(,);
printf("Case #%d: %d\n",cas++,sum*%MOD);
}
return ;
}
hdu5269 ZYB loves Xor I的更多相关文章
- HDU--5269 ZYB loves Xor I (字典树)
题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制 我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...
- ACM学习历程—HDU5269 ZYB loves Xor I(位运算 && dfs && 排序)(BestCoder Round #44 1002题)
Problem Description Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he ...
- ZYB loves Xor I(hud5269)
ZYB loves Xor I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 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 && BestCoder Round #44
题意: ZYB喜欢研究Xor,如今他得到了一个长度为n的数组A. 于是他想知道:对于全部数对(i,j)(i∈[1,n],j∈[1,n]).lowbit(AixorAj)之和为多少.因为答案可能过大,你 ...
- bestcoder r44 p3 hdu 5270 ZYB loves Xor II
这是昨晚队友跟我说的题,不知道当时是什么玄幻的事件发生了,,我看成了两两相乘的XOR 纠结了好长时间间 不知道该怎么办 今天早上看了下这道题,发现是两两相加的XOR 然后就想了想昨晚的思路 发现可做 ...
- 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 分治 || 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 (二分法)
题意: 给出一个序列,对每两个数求异或结果后取最低位的1出来作为一个数,然后求这些数字的和.比如:{a,b,c},结果是lowbit(a^b)+lowbit(a^c)+lowbit(b^a)+lowb ...
随机推荐
- ggplot2 geom相关设置—点重合处理(jitter)
在R中散点图的时候会经常出现,点重合比较严重的现象,这对我们寻找数据规律或者观察数据有很大的干扰. 所幸的是R中,可以用geom_jitter()函数来调整,消除点的重合. geom_jitter(m ...
- POJ 1922 Ride to School#贪心
(- ̄▽ ̄)-* //C跟着a君骑,然后更快的b君来了,C又跟着b君骑, //接着最快的d君来了,C就去跟着d君了, //最后最快的d君到达目的地时,C也就到了 //所以C的到达时间,就是最早到达的那 ...
- 向openwrt 源码添加ap143支持
借鉴地址:http://www.pppei.net/blog/post/536 1.向文件 \target\linux\ar71xx\generic\profiles\atheros.mk 中添加ap ...
- Spark 倾斜连接
[数据倾斜出现的原因] 并行计算中,我们总希望分配的每一个任务(task)都能以相似的粒度来切分,且完成时间相差不大.但是由于集群中的硬件和应用的类型不同.切分的数据大小不一,总会导致部分任务极大地拖 ...
- xampp 搭建 web mac上
1.安装 2.修改数据库密码,删除phpmyadmin ,用navicat 控制数据库 3.修改/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhos ...
- mybatis的insert返回主键
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parame ...
- PureLayout
PureLayout 是 iOS & OS X Auto Layout 的终极 API——非常简单,又非常强大.PureLayout 通过一个全面的Auto Layout API 扩展了 UI ...
- C/C++宏定义中#与##区别 .
// #表示:对应变量字符串化// ##表示:把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符 #define U_BOOT_CMD_MKENT_COMPLETE(name,maxa ...
- Oracle 10gR2 Dataguard搭建(非duplicate方式)
Oracle 10gR2 Dataguard搭建(非duplicate方式) 我的实验环境: 源生产库(主库): IP地址:192.168.1.30 Oracle 10.2.0.5 单实例 新DG库( ...
- HDU 4289 Control
最小割 一个点拆成两个 AddEdge(i,i+N,x); 原图中的每条边这样连 AddEdge(u+N,v,INF); AddEdge(v+N,u,INF); S是源点,t+N是汇点.最大流就是答案 ...