题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5269

思路分析:当lowbit(AxorB)=2p 时,表示A与B的二进制表示的0-p-1位相等,第p位不同;考虑维护一棵字母树,将所有数字

转换为二进制形式并且从第0位开始插入树中,并在每个节点中记录通过该结点的数字数目;最后统计答案,对于每一个数字,

对于在其路径中的每一个结点X,假设其为第K层,统计通过与该结点不同的值的结点的数目count,则结果增加count*2k;

代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int MAX_N = * + ;
int num[MAX_N];
struct Node{
Node *child[];
int count;
Node(){
count = ;
memset(child, , sizeof(child));
}
Node(int value){
count = value;
memset(child, , sizeof(child));
}
}; void Insert(Node *head, int value){
Node *pre = head, *next = NULL;
for (int i = ; i < ; ++ i){
if (pre->child[value & ] == NULL){
pre->child[value & ] = new Node();
pre = pre->child[value & ];
}else{
next = pre->child[value & ];
next->count++;
pre = next;
}
value >>= ;
}
} void MakeEmpty(Node *node){
node->count = ;
if (node->child[])
MakeEmpty(node->child[]);
if (node->child[])
MakeEmpty(node->child[]);
} long long Query(Node *head, int value){
Node *pre = head, *next = NULL, *other;
long long ret = ; for (int i = ; i < ; ++ i){
next = pre->child[value & ];
other = pre->child[(value & ) ^ ];
if (other)
ret = (ret + other->count * ( << i)) % ;
pre = next;
value >>= ;
}
return ret;
} int main(){
int case_times, n;
int case_id = ; scanf("%d", &case_times);
while (case_times--){
Node *head = new Node(); scanf("%d", &n);
for (int i = ; i < n; ++i){
scanf("%d", &num[i]);
Insert(head, num[i]);
} long long ans = ;
for (int i = ; i < n; ++i)
ans = (ans + Query(head, num[i])) % ;
MakeEmpty(head);
printf("Case #%d: %I64d\n", ++case_id, ans);
}
return ;
}

hdu 5269 ZYB loves Xor I(字典树)的更多相关文章

  1. 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 ...

  2. hdu 5269 ZYB loves Xor I

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...

  3. hdu 5269 ZYB loves Xor I &amp;&amp; BestCoder Round #44

    题意: ZYB喜欢研究Xor,如今他得到了一个长度为n的数组A. 于是他想知道:对于全部数对(i,j)(i∈[1,n],j∈[1,n]).lowbit(AixorAj)之和为多少.因为答案可能过大,你 ...

  4. 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取 ...

  5. HDU 5269 ZYB loves Xor I (二分法)

    题意: 给出一个序列,对每两个数求异或结果后取最低位的1出来作为一个数,然后求这些数字的和.比如:{a,b,c},结果是lowbit(a^b)+lowbit(a^c)+lowbit(b^a)+lowb ...

  6. 【HDU】5269 ZYB loves Xor I

    [算法]trie [题解] 为了让数据有序,求lowbit无法直接排序,从而考虑倒过来排序,然后数据就会呈现出明显的规律: 法一:将数字倒着贴在字典树上,则容易发现两数的lowbit就是它们岔道结点的 ...

  7. bestcoder r44 p3 hdu 5270 ZYB loves Xor II

    这是昨晚队友跟我说的题,不知道当时是什么玄幻的事件发生了,,我看成了两两相乘的XOR 纠结了好长时间间 不知道该怎么办 今天早上看了下这道题,发现是两两相加的XOR  然后就想了想昨晚的思路 发现可做 ...

  8. HDU--5269 ZYB loves Xor I (字典树)

    题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制  我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...

  9. ZYB loves Xor I(hud5269)

    ZYB loves Xor I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

随机推荐

  1. PHP 单列模式实例讲解以及参考网址

    1,http://blog.csdn.net/jungsagacity/article/details/7618587 2,http://www.cnblogs.com/lh460795/archiv ...

  2. spring mvc 非注解形式

    目录(?)[+] webxml配置文件 注如果使用注解可以加上-- servlet上下文配置文件 test-servletxml 实体类Empjava StartController控制器 控制器Em ...

  3. (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)

    We have already seen how to make jQuery react to the loading of a web page. The $(document).ready()e ...

  4. T-SQL应用,视图、存储过程、触发器、游标、临时表等

    sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有 ...

  5. jquery validationEngine 使用ajax验证不通过也提交表单

    转自 http://mylfd.iteye.com/blog/2007227 validationEngine给我们为前端的表单验证减少了很大的工作量.大部分情况我们使用validationEngin ...

  6. css2实现尖角箭头式导航

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  7. Azure 网站上的 Java

     编辑人员注释:本文章由Windows Azure 网站团队的项目经理Chris Compy 撰写. Microsoft 已推出针对 Azure 网站上基于 Java 的网站的支持.此功能旨在通过 ...

  8. cocos2dx CCEditBox

    CCTextFieldTTF是一个简单的封装,用起来不是那么便利,在cocos2dx的extension里,对输入框有更加简单使用的类,那就是CCEditBox 上代码先: bool EditBox0 ...

  9. HDU 3507 Print Article(CDQ分治+分治DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3507 [题目大意] 将长度为n的数列分段,最小化每段和的平方和. [题解] 根据题目很容易得到dp ...

  10. Java图形化界面设计——布局管理器之GridLayout(网格布局)

    网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式 ...