zoukankan      html  css  js  c++  java
  • 最大xor,and,or

    http://210.33.19.103/contest/998

    and,or部分 并不用01trie,题目&题解:https://blog.csdn.net/dreaming__ldx/article/details/81909133

    (奇怪的方法,然而至今没搞明白:https://blog.csdn.net/izumi_hanako/article/details/79317653

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 #define fi first
     7 #define se second
     8 #define mp make_pair
     9 #define pb push_back
    10 typedef long long ll;
    11 typedef unsigned long long ull;
    12 typedef pair<int,int> pii;
    13 namespace S
    14 {
    15 const int N=20000000;
    16 int ch[N][2],mem,sz[N];
    17 int gnode()
    18 {
    19     int t=++mem;ch[t][0]=ch[t][1]=0;sz[t]=0;
    20     return t;
    21 }
    22 const int dep=19;
    23 void ins(int x,int &num)
    24 {
    25     if(!num)    num=gnode();
    26     sz[num]++;
    27     bool d;int i,p=num;
    28     for(i=dep;i>=0;i--)
    29     {
    30         d=x&(1<<i);
    31         if(!ch[p][d])   ch[p][d]=gnode();
    32         p=ch[p][d];sz[p]++;
    33     }
    34 }
    35 int que(int x,int p)
    36 {
    37     bool d;int i,an=0;
    38     for(i=dep;i>=0;i--)
    39     {
    40         d=!(x&(1<<i));
    41         if(!sz[ch[p][d]])   d=!d;
    42         p=ch[p][d];
    43         if(d)   an|=(1<<i);
    44     }
    45     return an^x;
    46 }
    47 }
    48 bool vis[2001000];
    49 int q;
    50 int rt;
    51 void ins(int x)
    52 {
    53     if(vis[x])  return;
    54     vis[x]=1;
    55     for(int i=0;i<=19;i++)
    56         if(x&(1<<i))
    57             ins(x^(1<<i));
    58 }
    59 int que1(int x)//and
    60 {
    61     int i,an=0;
    62     for(i=19;i>=0;i--)
    63         if((x&(1<<i))&&vis[an|(1<<i)])
    64             an|=(1<<i);
    65     return an;
    66 }
    67 int que2(int x)//or
    68 {
    69     int i,an=0,d=0;
    70     for(i=19;i>=0;i--)
    71         if(x&(1<<i))
    72             an|=(1<<i);
    73         else if(vis[d|(1<<i)])
    74             an|=(1<<i),d|=(1<<i);
    75     return an;
    76 }
    77 int main()
    78 {
    79     int tp,x;
    80     scanf("%d",&q);
    81     while(q--)
    82     {
    83         scanf("%d%d",&tp,&x);
    84         if(tp==1)
    85         {
    86             S::ins(x,rt);
    87             ins(x);
    88         }
    89         else if(tp==2)
    90         {
    91             printf("%d %d %d
    ",S::que(x,rt),que1(x),que2(x));
    92         }
    93         else
    94         {
    95             printf("%d
    ",S::que(x,rt));
    96         }
    97     }
    98     return 0;
    99 }
    View Code
  • 相关阅读:
    fastjson反序列化漏洞研究(上)
    csv注入复现代码
    day24-python之面向对象
    day23-python之日志 re模块
    day22-python之模块
    day21-python模块
    day20-python之装饰器
    day18-python之迭代器和生成器
    day17-python之文件操作
    day16-python之函数式编程匿名函数
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9665195.html
Copyright © 2011-2022 走看看