[原创]HDU 5269 ZYB loves Xor I [01字典树]【思维】
2017-01-21 11:15:08 Tabris_ 阅读数:260
博客爬取于2020-06-14 22:42:04
以下为正文
版权声明:本文为Tabris原创文章,未经博主允许不得私自转载。
https://blog.csdn.net/qq_33184171/article/details/54645157
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5269
----------------------------------------------------------------------------------------.
ZYB loves Xor I Accepts: 142 Submissions: 696
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
问题描述
ZYB喜欢研究Xor,现在他得到了一个长度为nn的数组A。于是他想知道:对于所有数对$(i,j)(i \in [1,n],j \in [1,n])$,$lowbit(A_i xor A_j)lowbit(A_i xor A_j)$
之和为多少.由于答案可能过大,你需要输出答案对998244353取模后的值
定义$lowbit(x)=2^k$
,其中k是最小的满足$(x_{} and 2^k) > 0$的数
特别地:lowbit(0)=0
输入描述
一共$(T \leq10)$组数据,对于每组数据:
第一行一个正整数n,表示数组长度
第二行n个非负整数,第$i$个整数为$A_{i}$
$n \in [1,5*10^4],A_i \in [0,2^{29}]$
输出描述
每组数据输出一行Case #x: ans。x表示组数编号,从1开始。ans为所求值。
输入样例
2
5
4 0 2 7 0
5
2 6 5 4 0
输出样例
Case #1: 36
Case #2: 40
----------------------------------------------------------------------------------------.
解题思路:
这道题首先想的是用数组处理二进制每一位的0,1的个数,然后进行统计,在处理一下细节,但是最后发现只有在处理二进制下最后一位为1的数才好统计.于是GG
最后看了题解,提到了字典树,,,,顿时茅塞顿开,
我们只要从低位开始插入字典树中,并统计个数,每次统计就是二进制位上和它相反的数的个数*$(1<<i)$,
边插入边统计就好了.
附本题代码
----------------------------------------------------------------------------------------.
# include <bits/stdc++.h> |


