hdu 5269 trie树
现场想到了lowbit(X xor Y)=X和Y从右向左数,对应相同的数的个数+1。。。然而并没有想到接下来用trie树
然后就想排个序试试。。。然后就整个人都不好了啊摔
sol:用trie,一边insert一边输出答案
找出Ai的二进制数翻转后在字母树上的路径,对于路径上每个点x,设他走的边是v,且当前为第k位,则和他xor后lowbit为2k的数的个数为trans(x,v^1)的子树大小。
注意这里v=0or1,即可以取的字符。
仿照lrj的模板写了一次。。结果写残了233。因为没有考虑好0这种情况
lrj模板里插入的都是字符串,不会存在0(也就是空)的情况。然而要想插入数字0就完蛋了
int Insert(LL X)
{
int u=,dep=;
while(X!=)
{
int c=(X&)+;
X=X>>;
if(!ch[u][c])
{
memset(ch[sz],,sizeof(ch[sz]));
ch[u][c]=sz;
sz++;
}
val[u]++;
dp[u]=dep;
dep++;
f[ch[u][c]]=u;
u=ch[u][c];
}
return u;
}
写残的Code【雾
AC Code:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define LL long long
#define MOD 998244353;
LL bit[]; int a[];
LL ans ;
int T; struct Trie{
int next[*][];
int num[*];
int root,tot;
int newnode(){
num[tot] = ;
next[tot][] = next[tot][] = -;
tot++;
return tot-;
}
void init(){
tot = ;
root = newnode();
}
void insert(int val){
int now = root;
for(int i = ;i < ;i++){
int id;
if(val&bit[i])id = ;
else id = ;
if(next[now][id^] != -){
//ans += (num[next[now][id^1]]<<i)%MOD;
ans += (long long)bit[i]*num[next[now][id^]]%MOD;
ans %= MOD;
}
if(next[now][id] == -)
next[now][id] = newnode();
now = next[now][id];
num[now]++;
}
}
}tree; int main()
{
bit[] = ;
for(int i = ;i < ;i++)
bit[i] = *bit[i-]; cin>>T;
for(int TT=;TT<=T;TT++)
{
int n;
cin>>n;
ans = ;
tree.init();
for(int i = ;i <= n;i++)
{
scanf("%d",&a[i]);
tree.insert(a[i]);
}
ans = ans*%MOD;
printf("Case #%d: %I64d\n",TT,ans);
}
return ;
}
hdu 5269 trie树的更多相关文章
- HDU 1251 Trie树模板题
1.HDU 1251 统计难题 Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...
- hdu 1251 trie树
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Problem De ...
- ZYB loves Xor I HDU - 5269 字典树
题意: T组样例,给你n个数.你要找出来这n个数中任意两个数的二进制位中 最低位不同 的位置(假设是k),然后让所有2^k加起来就是结果 什么意思? 例如4 和 2 4的二进制是(100),2的二 ...
- HDU 4825 Trie树 异或树!
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
- 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 4099 Revenge of Fibonacci Trie树与模拟数位加法
Revenge of Fibonacci 题意:给定fibonacci数列的前100000项的前n位(n<=40);问你这是fibonacci数列第几项的前缀?如若不在前100000项范围内,输 ...
- HDU 11488 Hyper Prefix Sets (字符串-Trie树)
H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...
- HDU 1251 统计难题 (字符串-Trie树)
统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单 ...
- 【HDU - 5790 】Prefix(主席树+Trie树)
BUPT2017 wintertraining(15) #7C 题意 求[min((Z+L)%N,(Z+R)%N)+1,max((Z+L)%N,(Z+R)%N)+1]中不同前缀的个数,Z是上次询问的结 ...
随机推荐
- AngularJS中的身份验证
欢迎大家指导与讨论 : ) 一. 身份验证的意义 首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源.基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一 ...
- Alpha版本发布说明
软件发布的同时,在团队博客上写一个发布说明 ▪ 列出这一版本的新功能 ▪ 这一版本修复的缺陷 ▪ 对运行环境的要求 ▪ 安装方法 ▪ 描述系统已知的问题和限制 ...
- c++ 副本构造器
我们都知道两个指针指向同一个变量时如果一个指针被释放那么另一个就会出问题 为了说明问题我做了一个很恶心的小例子 class C { public : C(int v) { ptrInt=new int ...
- 实用的开源百度云分享爬虫项目yunshare - 安装篇
今天开源了一个百度云网盘爬虫项目,地址是https://github.com/callmelanmao/yunshare. 百度云分享爬虫项目 github上有好几个这样的开源项目,但是都只提供了爬虫 ...
- C# 传值给C++
http://www.cnblogs.com/xumingming/archive/2008/10/10/1308248.html C#(.net)中的DllImport 大家在实际工作学习C# ...
- ASP.NET XmlSerializer权限问题
今天碰到一个奇怪问题.因为在2台服务器上做文件共享,使服务器A能访问服务器B的共享目录.在IIS上使用虚拟目录实现的话,需要给应用程序池指定一个统一的账号.在调试的时候能够使用,但是一部署到服务器上, ...
- JVM内存管理------杂谈(借此也论一论obj=null)
各位园友好,LZ是从某网站转战过来的博主,看到这里很多博主都称看友们为园友,LZ斗胆模仿一下,不过以前,LZ其实都是称看友们为猿友的.之前LZ在某网站已经写了一系列文章,已经全部复制到了园内的新博客, ...
- js的数组
转载:http://blog.163.com/sammer_rui/blog/static/846200442010717900634/ https://developer.mozilla.org/z ...
- ASP.NET mvc异常处理的方法
第一种:全局异常处理 1.首先常见保存异常的类(就是将异常信息写入到文件中去) public class LogManager { private string logFilePath = strin ...
- MVC架构设计——EF-Code First
详情参考:http://www.cnblogs.com/guomingfeng/archive/2013/05/28/mvc-ef-repository.html