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

题目电波: HDU--5269 ZYB loves Xor I 

首先我们先解决 ai xor aj 每个数转化为二进制  我们用字典树统计 每个节点 0 和 1 的出现的个数

#include<bits/stdc++.h>
using namespace std;
#define maxn 50000
#define mod 998244353;
struct ac{
  int sum,nex[3];
  void init(){
     sum=0; memset(nex,0,sizeof(nex));
  }
}tre[maxn*30];
int tot;
long long ans=0;
void init(){
   tot=0;ans=0;
   memset(tre,0,sizeof(tre));
}
void add(int x){
  int k=0;
  for(int j=0;j<=30;j++){
     bool fa=(x&(1<<j));
     //cout<<fa<<endl;
     if(tre[k].nex[fa^1]){
        int i=tre[k].nex[fa^1];
        ans+=1LL*(1LL*1<<j)*tre[i].sum%mod;
        ans%=mod;
     }
     if(tre[k].nex[fa]==0){
        tre[k].nex[fa]=++tot;
        tre[tot].init();
     }
     k=tre[k].nex[fa];
     tre[k].sum++;
  }
}
int main(){
   int t,tt=1;
   cin>>t;
   while(t--){
     init();
     int n;
     cin>>n;
     for(int j=0;j<n;j++){
        int x;
        scanf("%d",&x);
        add(x);
     }
     ans*=2;
     ans%=mod;
     printf("Case #%d: %lld\n",tt++,ans);
   }
}

 

全部评论

相关推荐

11-21 13:04
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务