ZYB loves Xor I HDU - 5269 字典树
题意:
T组样例,给你n个数。你要找出来这n个数中任意两个数的二进制位中 最低位不同 的位置(假设是k),然后让所有2^k加起来就是结果
什么意思?
例如4 和 2
4的二进制是(100),2的二进制是(010),那么它们二进制位中 最低位不同 的位置 就是1,然后把这个2^1加入最后结果就完了
注意:4和2算一次结果,2和4也要算一次结果
解释个样例:
5
4 0 2 7 0
sum=0
4和0:k=2,sum+=2^2
4和2:k=1,sum+=2^1
4和7:k=0,sum+=2^0
4和0:k=2,sum+=2^2
0和2:k=1,sum+=2^1
0和7:k=0,sum+=2^0
0和0:因为0^0=0,题目上lowbit(0)=0,所以sum+=0
2和7:k=0,sum+=2^0
2和0:k=1,sum+=2^1
7和0:k=0,sum+=2^0
sum=4+2+1+4+2+1+0+1+2+1=18
又因为“4和2算一次结果,2和4也要算一次结果”,所以sum*=2
sum=36
题解:
观察发现对于任意一个数 x 来说,只要前 i-1 位和其它数相等,第i位不相等。那么 ans += cnt * pow(2, i-1);
cnt 为和它前i-1个前缀都相等的数的个数。 可以利用字典树边插入边更新ans,最后ans*2就是答案。
数组开小了TLE了半天。。。。
代码:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <cstdlib>
5 #include <algorithm>
6 using namespace std;
7 typedef long long ll;
8 const int maxn=2;
9 const ll mod=998244353;
10 typedef struct Trie* TrieNode;
11 ll v[50005];
12 ll w[31],result;
13 struct Trie
14 {
15 ll val,sum;
16 TrieNode next[2];
17 Trie()
18 {
19 val=0;
20 sum=0;
21 memset(next,NULL,sizeof(next));
22 }
23 };
24
25 void inserts(TrieNode root,ll x,ll y)
26 {
27 TrieNode p = root;
28 for(ll i=0;i<30;++i)
29 {
30 ll temp=(x>>i)&1;
31 if(p->next[temp]==NULL) p->next[temp]=new struct Trie();
32 if(p->next[!temp]!=NULL && p->next[!temp]->sum>0)
33 {
34 ll t=p->next[!temp]->sum;
35 t=(t*(ll)w[i])%mod;
36 result=(result+t)%mod;
37 }
38 p->next[temp]->sum+=y;
39 p=p->next[temp];
40 }
41 p->val=x;
42 }
43 void Del(TrieNode root)
44 {
45 for(ll i=0 ; i<2 ; ++i)
46 {
47 if(root->next[i])Del(root->next[i]);
48 }
49 delete(root);
50 }
51
52 int main()
53 {
54 ll t,n,sum=1;
55 int p=0;
56 w[0]=1;
57 for(int i=1;i<=30;++i)
58 {
59 sum=(sum*2)%mod;
60 w[i]=sum;
61 }
62 scanf("%lld",&t);
63 while(t--)
64 {
65 TrieNode root = new struct Trie();
66 scanf("%lld",&n);
67 //ll ans=0;
68 result=0;
69 for(ll i=1;i<=n;++i)
70 {
71 scanf("%lld",&v[i]);
72 inserts(root,v[i],1);
73 }
74 printf("Case #%d: %lld\n",++p,(result<<1)%mod);
75 Del(root);
76 }
77 return 0;
78 }
ZYB loves Xor I HDU - 5269 字典树的更多相关文章
- HDU--5269 ZYB loves Xor I (字典树)
题目电波: HDU--5269 ZYB loves Xor I 首先我们先解决 ai xor aj 每个数转化为二进制 我们用字典树统计 每个节点 0 和 1 的出现的个数 #include< ...
- 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 4825 Xor Sum(01字典树入门题)
http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数. 思路:将给出的 ...
- hdu 4825 Xor Sum(01字典树模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
- HDU 4825 Xor Sum(01字典树)题解
思路:先把所有数字存进字典树,然后从最高位贪心. 代码: #include<set> #include<map> #include<stack> #include& ...
- HDU 4825 Xor Sum (裸字典树+二进制异或)
题目链接 Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将 ...
- Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...
- HDU 5687 字典树插入查找删除
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...
随机推荐
- 【Linux】java.io.IOException: error=24, Too many open files解决
linux系统中执行java程序的时候,如果打开文件超过了限制,就会报错: java.io.IOException: error=24, Too many open files 解决办法: 首先查看j ...
- CyNix-lxd提权
0x01 信息收集 nmap -p- -T5 192.168.43.155扫描开放端口 nmap -sV -p 80,6688 -A 192.168.43.155 -oA cynix扫描指定端口 go ...
- 计算机之路 -MySQL 初学
照着电脑学了一天终于把MySQL装上了. 明天打算重新装一次 然后再自己记录一下步骤
- 带你走进memcache,老牌内存缓存技术
一.核心优化概述 什么是优化:以更小的资源支持更大负载网站的运行,以小博大. 思路:尽量减少用户等待时间,节省系统资源开销,节省带宽使用. 优化什么地方?有三方面:Memcache内存缓存技术.静态化 ...
- OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇
少废话,先上效果图 屏幕显示效果 全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...
- ATtiny3217 x WS2812B梦幻联动
TinyAVR 1-series是Microchip于2018年推出的AVR单片机系列,定位是新一代的8位单片机,ATtiny3217是其中最高端的一款.相比于ATmega328P那个时代的AVR,A ...
- Android事件分发机制五:面试官你坐啊
前言 很高兴遇见你~ 事件分发系列文章已经到最后一篇了,先来回顾一下前面四篇,也当个目录: Android事件分发机制一:事件是如何到达activity的? : 从window机制出发分析了事件分发的 ...
- python(paramiko模块的简单使用)
#通过paramiko模块连接主机运行bash命令 import paramiko hostname = '192.168.88.31' port = 22 username = 'root' pas ...
- 大型 web 前端架构设计-面向抽象编程入门
https://mp.weixin.qq.com/s/GG6AtBz6KgNwplpaNXfggQ 大型 web 前端架构设计-面向抽象编程入门 曾探 腾讯技术工程 2021-01-04 依赖反转 ...
- (Oracle)看懂Oracle执行计划(转载)
最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...