[LOJ6469]Magic

题目大意:

有\(n(n\le10^5)\)个物品,每个物品有一个权值\(w_i(w_i\le10^{18})\)。求所有\(n\choose 2\)对物品\((i,j)\)对应\(\lfloor\log_{10}(w_i\oplus w_j)\rfloor+1\)之和。

思路:

相当于枚举\(10\)的若干次方\(m\),然后在字典树上查找\(\ge m\)的数对的个数。

源代码:

#include<cstdio>
#include<cctype>
typedef long long int64;
inline int64 getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int64 x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=1e5+1,B=59;
const int64 A=1e18;
int64 ans=0;
class Trie {
private:
int val[N*B],ch[N*B][2],sz;
public:
void insert(const int64 &x) {
for(register int i=B,p=0;i>=0;i--) {
const bool b=(x>>i)&1;
if(!ch[p][b]) ch[p][b]=++sz;
p=ch[p][b];
val[p]++;
}
}
void query(const int &p,const int &q,const int64 &x,const int &d) {
if(d==-1||(1llu<<(d+1))<=(unsigned long long)x) return;
if((1ll<<d)>=x) {
ans+=1ll*val[ch[p][0]]*val[ch[q][1]];
ans+=1ll*val[ch[p][1]]*val[ch[q][0]];
if(ch[p][0]&&ch[q][0]) query(ch[p][0],ch[q][0],x,d-1);
if(ch[p][1]&&ch[q][1]) query(ch[p][1],ch[q][1],x,d-1);
} else {
if(ch[p][0]&&ch[q][1]) query(ch[p][0],ch[q][1],x-(1ll<<d),d-1);
if(ch[p][1]&&ch[q][0]) query(ch[p][1],ch[q][0],x-(1ll<<d),d-1);
}
}
};
Trie t;
int main() {
const int n=getint();
for(register int i=0;i<n;i++) {
t.insert(getint());
}
for(register int64 i=1;i<=A;i*=10) {
t.query(0,0,i,B);
}
ans/=2;
printf("%lld\n",ans);
return 0;
}

最新文章

  1. Python入门5
  2. Nginx详解-服务器集群
  3. linux 修改home 目录
  4. Ubuntu14.04手动创建桌面快捷方式
  5. 编译安装GCC 4.7.2
  6. hibernate.properties
  7. CoreDate的使用
  8. asp.net 文件操作小例子(创建文件夹,读,写,删)
  9. 【USACO 3.3.1】骑马修栅栏
  10. BZOJ 1560 火星藏宝图(DP)
  11. javascript常用的Math对象的方法
  12. linux系统下安装ruby环境
  13. Revit API创建房间
  14. share pool 管理机制
  15. win8中的参数传递
  16. am335x Qt SocketCAN Demo hacking
  17. mongodb的学习-5-概念解析
  18. WebView具体介绍
  19. 认识Mac中的那些符号
  20. gmssl

热门文章

  1. java 托盘 实现二级菜单
  2. python selenium-webdriver 生成测试报告
  3. AR 前言
  4. 在Git.oschina.net中配置TortoiseGit使用sshkey,无需输入账号和密码
  5. Spring Boot配置文件放在jar外部
  6. 删除了原有的offset之后再次启动会报错park Streaming from Kafka has error numRecords must not ...
  7. mysql基础理论
  8. DC3求后缀数组板子
  9. Centos7创建CA和申请证书
  10. 牛客 Wannafly 挑战赛26D 禁书目录 排列组合 概率期望