现场想到了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就完蛋了

 1     int Insert(LL X)
 2     {
 3         int u=0,dep=1;
 4         while(X!=0)
 5         {
 6             int c=(X&1)+1;
 7             X=X>>1;
 8             if(!ch[u][c])
 9             {
10                 memset(ch[sz],0,sizeof(ch[sz]));
11                 ch[u][c]=sz;
12                 sz++;
13             }
14             val[u]++;
15             dp[u]=dep;
16             dep++;
17             f[ch[u][c]]=u;
18             u=ch[u][c];
19         }
20         return u;
21     }
写残的Code【雾

相关文章:

  • 2021-08-26
  • 2021-12-04
  • 2021-09-11
  • 2021-11-21
  • 2021-08-18
  • 2022-02-18
  • 2022-12-23
  • 2021-06-30
猜你喜欢
  • 2021-12-28
  • 2022-12-23
  • 2021-12-27
  • 2021-09-05
  • 2021-05-29
  • 2021-08-18
  • 2021-11-21
相关资源
相似解决方案