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 ...
随机推荐
- scale相关设置—颜色设置
颜色设置,在R的可视化中,应该算是相对比较重要的一项内容,如何把握颜色,很大程度上影响图形的展现效果. 在ggplot的scale设置中,颜色相关的函数较多: scale_fill/colour_hu ...
- JS 之完美运动框架 如何同时改变元素多个属性?
正如改变一个属性的方法,可以使用已经写好的运动函数如move(obj,attr,target,fn);我们可能会想这样做, 调用两次运动函数,如同时改变宽和高,move(obj,'width',tar ...
- CPU高问题排查
双11大战开始了,这几天公司系统压测,CPU各种报警,于是找了篇关于CPU高问题排查的文章. 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎 ...
- Digital Ocean VS. Linode对比评测
美国攻城师Zach Schneider是linode vps资深用户,他最近却转向了Digital Ocean,原因是什么呢?来看这篇digitalocean linode对比评测的文章: 用了两年的 ...
- apicloud ios 打包流程
1创建APP ID 等 2创建pruduction创建证书,用 这个证书导出P12格式的.. 3profile 证书,选 APP STORE AD-HOC ok... http://docs.api ...
- 多线程---静态同步函数的锁是class(转载)
/** 如果同步函数被静态修饰,那么他的锁就是该方法所在类的字节码文件对象 类名.class 静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象. 该对象就是:类名.class ...
- 1bpp像素遍历(找了半天,感谢github)
/// <summary> /// 获取比例 /// </summary> /// <param name="rect"></param& ...
- jqgird 实践
$.jgrid.defaults.styleUI="Bootstrap"; $("#table_list_2").jqGrid({ multiselect: t ...
- js继承实现
JS实现继承可以分为:对象冒充和原型链继承 其中对象冒充又包括:临时变量,call 和 apply 临时变量方法: function Person(name,sex){ this.name = nam ...
- C语言_用if```else语句解决奖金发放问题
#include<stdio.h> #include<stdlib.h> /*企业发放的奖金根据利润提成,发放规则如下: 利润(I)低于或等于10万元时,奖金可提10%: 利润 ...