分治法和字典树都可以,都是递归,但字典树耗内存

  从第一bit开始,若相同则xor为0,分到同一部分,不相同则统计,且此时lowbit为这一bit,最后结果要乘以2

 

  1. /*分治法*/
  2. #include<cstdio>
  3. #define MOD 998244353
  4.  
  5. using namespace std;
  6.  
  7. int a[],t[],T,cas=,n,sum;
  8.  
  9. void fenzhi(int l,int r,int mask)
  10. {
  11. if(r-l<=||mask==<<) return;
  12. int i,j=l,k=r-;
  13. for(i=l;i<r;i++)
  14. {
  15. if(a[i]&mask) t[j++]=a[i];
  16. else t[k--]=a[i];
  17. }
  18. sum=(sum+(long long)(j-l)*(r-j)*mask)%MOD;
  19. for(i=l;i<r;i++) a[i]=t[i];
  20. fenzhi(l,j,mask<<);
  21. fenzhi(j,r,mask<<);
  22. }
  23. int main()
  24. {
  25. scanf("%d",&T);
  26. while(T--)
  27. {
  28. scanf("%d",&n);
  29. for(int i=;i<n;i++)
  30. scanf("%d",&a[i]);
  31. sum=;
  32. fenzhi(,n,);
  33. printf("Case #%d: %d\n",cas++,(sum*)%MOD);
  34. }
  35. return ;
  36. }
  1. /*字典树*/
  2. #include <iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define MOD 998244353
  6.  
  7. using namespace std;
  8.  
  9. struct Node
  10. {
  11. int num;
  12. int left,right;
  13. };
  14. Node node[];
  15. int T,n,a,idx,sum,cas=;
  16.  
  17. void insert(int a)
  18. {
  19. int root=,mask=;
  20. for(int i=;i<;i++)
  21. {
  22. if(a&mask)
  23. {
  24. int &u=node[root].left;
  25. if(!u) u=idx++;
  26. node[u].num++;
  27. root=u;
  28. }
  29. else
  30. {
  31. int&u=node[root].right;
  32. if(!u) u=idx++;
  33. node[u].num++;
  34. root=u;
  35. }
  36. mask<<=;
  37. }
  38. }
  39.  
  40. void dfs(int x,int depth)
  41. {
  42. if(node[x].num<=) return;
  43. sum=(sum+(long long)node[node[x].left].num*node[node[x].right].num*(<<depth))%MOD;
  44. dfs(node[x].left,depth+);
  45. dfs(node[x].right,depth+);
  46. }
  47. int main()
  48. {
  49. scanf("%d",&T);
  50. while(T--)
  51. {
  52. scanf("%d",&n);
  53. memset(node,,sizeof(node[])*n*);
  54. idx=;
  55. node[].num=n;
  56. for(int i=;i<n;i++)
  57. {
  58. scanf("%d",&a);
  59. insert(a);
  60. }
  61. sum=;
  62. dfs(,);
  63. printf("Case #%d: %d\n",cas++,sum*%MOD);
  64. }
  65. return ;
  66. }

hdu5269 ZYB loves Xor I的更多相关文章

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

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

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

  3. ZYB loves Xor I(hud5269)

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

  4. hdu 5269 ZYB loves Xor I

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

  5. 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)之和为多少.因为答案可能过大,你 ...

  6. bestcoder r44 p3 hdu 5270 ZYB loves Xor II

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

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

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

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

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

随机推荐

  1. laravel5.2/laravel5.3入门指南 Windows 上快速安装并运行 Laravel 5.x

    1 首先要搭建本地服务器环境推荐phpstudy2016及wampServer3.0.6 下载链接可参考 http://www.cnblogs.com/zzcit/p/5823742.html 注意一 ...

  2. js for...in 语句

    原文链接:http://www.w3school.com.cn/js/js_loop_for_in.asp for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作). 实例 ...

  3. Java IO 四大附加接口、try-with-resource

    Java IO 四大附加接口.try-with-resource @author ixenos 四大附加接口 Closeable.Flushable.Readable.Appendable Close ...

  4. 7.hibernat实现双向一对多(多对一)

    1.创建如下项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding="UTF-8& ...

  5. 6、plsql编程

    一.PLSQL编程思维导图 二.PLSQL编程思维导图对应笔记 PL/SQL编程 @Holly老师 5.1 为什么学习PL/SQL编程? 当我们要批量插入100万数据,怎么办? .难道要写一百条ins ...

  6. Zeppelin添加mysql解释器

    安装Apache zeppelin 1 wget http://apache.fayea.com/zeppelin/zeppelin-0.6.2/zeppelin-0.6.2-bin-all.tgz ...

  7. C/C++ - <string> 与<string.h>、<cstring>的区别

    <string.h><string.h>是C版本的头文件,包含比如strcpy.strcat之类的字符串处理函数. <string><string>是C ...

  8. 放弃阿里云主机,选择高性价比Vultr VPS免备案

    阿里云主机ECS推广多年后,质量有所改善,但我依然强烈不推荐阿里云主机.考虑性价比带宽速度等因素后,我推荐的vps品牌有vultr和digitalocean,还有大名鼎鼎的linode,是中国用户的最 ...

  9. 一个神奇SQL引发的故障【转】

    前几天一个客户数据库主实例告警,诊断过程中发现是由一个慢SQL导致的数据库故障,而在排查逐步深入之后却发现这个现象的不可思议. 问题描述 2016年12日09日,大概9点26分左右,一个客户的生产库主 ...

  10. sql参数化查询避免注入漏洞的原因探析

    网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...