• D. Vitya and Strange Lesson Codeforces Round #430 (Div. 2)


    http://codeforces.com/contest/842/problem/D

    树 二进制(路径,每个节点代表一位)

     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <time.h>
     6 #include <string>
     7 #include <set>
     8 #include <map>
     9 #include <list>
    10 #include <stack>
    11 #include <queue>
    12 #include <vector>
    13 #include <bitset>
    14 #include <ext/rope>
    15 #include <algorithm>
    16 #include <iostream>
    17 using namespace std;
    18 #define ll long long
    19 #define minv 1e-6
    20 #define inf 1e9
    21 #define pi 3.1415926536
    22 #define E  2.7182818284
    23 const ll mod=1e9+7;//998244353
    24 const int maxn=1e5+10;
    25 
    26 bool tr[524288<<2]={0};//19+2
    27 int f[21];
    28 int w=19;
    29 
    30 int main()
    31 {
    32     int n,m,a,b,i,j,k,value;
    33     scanf("%d%d",&n,&m);
    34     while (n--)
    35     {
    36         scanf("%d",&a);
    37         b=a;
    38         for (i=w;i>=1;i--)
    39         {
    40 
    41             f[i]=a & 1;
    42             a>>=1;
    43         }
    44         j=1;
    45         for (i=1;i<=w;i++)
    46         {
    47             j<<=1;
    48             if (f[i]==1)
    49                 j++;
    50         }
    51         tr[j]=1;
    52     }
    53 
    54     for (i=(1<<w)-1;i>=1;i--)
    55         tr[i]=tr[i<<1]&tr[i<<1|1];
    56 
    57     b=0;
    58     while (m--)
    59     {
    60         scanf("%d",&a);
    61         b=a^b;
    62 
    63         a=b;
    64         for (i=w;i>=1;i--)
    65         {
    66             f[i]=a & 1;
    67             a>>=1;
    68         }
    69         j=1;
    70         k=1<<(w-1);
    71         value=0;
    72         for (i=1;i<=w;i++)
    73         {
    74             j<<=1;
    75             if (!tr[j+f[i]])
    76             {
    77                 j+=f[i];
    78             }
    79             else
    80             {
    81                 j+=(f[i] ^ 1);
    82                 value+=k;
    83             }
    84             k>>=1;
    85         }
    86         printf("%d
    ",value);
    87     }
    88     return 0;
    89 }
  • 相关阅读:
    linux-文件
    字符串函数
    函数
    内存管理
    静态库、动态库文件制作
    Makefile 待完善
    指针
    开发板GEC6816环境搭建,使用VS code
    C语言数组
    连接开发板下载程序
  • 原文地址:https://www.cnblogs.com/cmyg/p/9529841.html
Copyright © 2020-2023  润新知