HDU 6059 17多校3 Kanade's trio(字典树)
There are T test cases.
1≤T≤20
1≤∑n≤5∗105
0≤A[i]<230
For each test case , the first line consists of one integer n ,and the second line consists of n integers which means the array A[1..n]
利用字典树维护前 k-1 个数。当前处理第 k 个数。
显然对于 k 与 i 的最高不相同位 kp 与 ip :
当 ip=0 , kp=1 时,该最高不相同位之前的 ihigher=khigher 。则 jhigher 可以为任意数,均不对 i, k 更高位(指最高不相同位之前的高位,后同)的比较产生影响。而此时 jp 位必须为 0 才可保证不等式 (Ai⊕Aj)<(Aj⊕Ak) 成立。
当 ip=1,kp=0 时,jp 位必须为 1 ,更高位任意。
故利用数组 cnt[31][2] 统计每一位为 0 ,为 1 的有多少个(在前 K-1 个数中)。在字典树插入第 k 个数时,同时统计最高不相同位,即对于每次插入的 p 位为 num[p] (取值 0 或 1),在同父节点对应的 1-num[p] 为根子树的所有节点均可作为 i 来寻找 j 以获取对答案的贡献。其中又仅要求 jp 与 ip (ip 值即 1-num[p]) 相同,故 jp 有 cnt[p][ 1-num[p] ] 种取值方案。
但是,同时需要注意 i 与 j 有在 A 数组的先后关系 (i<j) 需要保证。故在字典树中额外维护一个 Ext 点,记录将每次新加入的点与多少原有点可构成 i, j 关系。在后续计算贡献时去掉。
其余详见代码注释。
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<cmath>
#include<cstring>
using namespace std;
long long ans1,ans2;
int num[];//每一个数字的二进制转化
int cnt[][];//cnt[i][j]记录全部插入数字第i位为0、1分别的数字 struct trie
{
trie* next[];
int cnt,ext;
trie()
{
next[]=NULL;
next[]=NULL;
cnt=;//拥有当前前缀的数字个数
ext=;//
}
}; void calc(trie* tmp,long long c)
{
ans1+=tmp->cnt*(tmp->cnt-)/;
ans2+=(c-tmp->cnt)*tmp->cnt-tmp->ext;
} void insert(trie* r)
{
int i;
for(i=;i<=;i++)
{
if(r->next[num[i]]==NULL)
r->next[num[i]]= new trie;
if(r->next[-num[i]]!=NULL)
calc(r->next[-num[i]],cnt[i][-num[i]]);
r=r->next[num[i]];
r->cnt++;
r->ext+=cnt[i][num[i]]-r->cnt;
//每个点存下同位同数不同父亲节点的数字个数且序号比本身小的
}
return ;
} int main()
{
int T,n,tmp;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
trie root;
ans1=;//i,j选自同父亲节点
ans2=;//i选自同父亲节点,j选择同位不同数不同父亲节点
memset(cnt,,sizeof(cnt));
while(n--)
{
scanf("%d",&tmp);
for(int i=;i>=;i--)//这样可以保证不同大小的数字前缀都为0
{
num[i]=tmp%;
cnt[i][num[i]]++;
tmp/=;
}
insert(&root);
}
printf("%lld\n",ans1+ans2);
}
return ;
}
HDU 6059 17多校3 Kanade's trio(字典树)的更多相关文章
- hdu6059 Kanade's trio 字典树+容斥
转自:http://blog.csdn.net/dormousenone/article/details/76570172 /** 题目:hdu6059 Kanade's trio 链接:http:/ ...
- HDU 6060 17多校3 RXD and dividing(树+dfs)
Problem Description RXD has a tree T, with the size of n. Each edge has a cost.Define f(S) as the th ...
- HDU 6140 17多校8 Hybrid Crystals(思维题)
题目传送: Hybrid Crystals Problem Description > Kyber crystals, also called the living crystal or sim ...
- HDU 6143 17多校8 Killer Names(组合数学)
题目传送:Killer Names Problem Description > Galen Marek, codenamed Starkiller, was a male Human appre ...
- HDU 6045 17多校2 Is Derek lying?
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=6045 Time Limit: 3000/1000 MS (Java/Others) Memory ...
- HDU 6124 17多校7 Euler theorem(简单思维题)
Problem Description HazelFan is given two positive integers a,b, and he wants to calculate amodb. Bu ...
- HDU 3130 17多校7 Kolakoski(思维简单)
Problem Description This is Kolakosiki sequence: 1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1……. This seq ...
- HDU 6038 17多校1 Function(找循环节/环)
Problem Description You are given a permutation a from 0 to n−1 and a permutation b from 0 to m−1. D ...
- HDU 6034 17多校1 Balala Power!(思维 排序)
Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He want ...
随机推荐
- 成功解决You are using pip version 9.0.1, however version 9.0.3 is available. You should consider upgra
解决问题 You are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrad ...
- 压力测试之ab命令
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. ab是apache自带的压力测试工具.ab非常实用,它不 ...
- 十、 持久层框架(MyBatis)
一.基于MyBatis动态SQL语句 1.if标签 实体类Product的字段比较多的时候,为了应付各个字段的查询,那么就需要写多条SQL语句,这样就变得难以维护. 此时,就可以使用MyBatis动态 ...
- PReLU
PReLU全名Parametric Rectified Linear Unit. PReLU-nets在ImageNet 2012分类数据集top-5上取得了4.94%的错误率,首次超越了人工分类的错 ...
- mysql5.6主从配置
在windows 7系统上安装mysql5.6, 主库: 安装目录为:D:\Program Files\MySQL\MySQL Server 5.6 从库: 对安装目录进行拷贝,重命名:D:\Prog ...
- JavaScript中 null 的 typeof是object
JavaScript中 null 的 typeof是object
- Kali配置教程
1.配置软件源 所有操作没有说明,都是以root身份执行. 打开一个终端执行: cat >> /etc/apt/sources.list <<EOF deb http://mi ...
- 运维相关 docker
- python3练习-装饰器
在廖雪峰的官方网站学习装饰器章节时,初步理解类似与面向切面编程.记录一下自己的课后习题解法. 问题: 请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call ...
- linux git:fatal: HTTP request failed
问题 问题的出现比较奇怪 我一台电脑 git clone 没问题 另外一台电脑 git clone 有问题 解决 yum update nss nss-util nspr 参考 https: ...