zoukankan      html  css  js  c++  java
  • BZOJ 4269: 再见Xor

    4269: 再见Xor

    Time Limit: 10 Sec  Memory Limit: 512 MB
    Submit: 265  Solved: 159
    [Submit][Status][Discuss]

    Description

    给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值。

    Input

    第一行一个正整数N。
    接下来一行N个非负整数。

    Output

    一行,包含两个数,最大值和次大值。

    Sample Input

    3
    3 5 6

    Sample Output

    6 5

    HINT

    100% : N <= 100000, 保证N个数不全是0,而且在int范围内

    Source

     
    [Submit][Status][Discuss]

    又是一道线性基,先求出一组线性基,这组线性基的异或和就是最大值,再异或一下其中最小的,就是最小值了。

     1 #include <cstdio>
     2 
     3 template <class T>
     4 __inline void swap(T &a, T &b)
     5 {
     6     static T c;
     7     c = a;
     8     a = b;
     9     b = c;
    10 }
    11 
    12 const int mxn = 100005;
    13 
    14 int n, a[mxn], b[mxn], c;
    15 
    16 signed main(void)
    17 {
    18     scanf("%d", &n);
    19     
    20     for (int i = 1; i <= n; ++i)
    21         scanf("%d", a + i);
    22     
    23     for (int i = 1; i <= n; ++i)
    24     {
    25         for (int j = n; j > i; --j)
    26             if (a[i] < a[j])
    27                 swap(a[i], a[j]);
    28         
    29         if (a[i])
    30             ++c;
    31         else
    32             break;
    33         
    34         for (int j = 31; ~j; --j)
    35             if ((a[i] >> j) & 1)
    36             {
    37                 b[i] = j;
    38                 
    39                 for (int k = 1; k <= n; ++k)
    40                     if (k != i && (a[k] >> j) & 1)
    41                         a[k] ^= a[i];
    42                 
    43                 break;
    44             }
    45     }
    46     
    47     int ans = 0;
    48     
    49     for (int i = 1; i <= c; ++i)
    50         ans ^= a[i];
    51     
    52     printf("%d %d
    ", ans, ans ^ a[c]);
    53 }

    @Author: YouSiki

  • 相关阅读:
    NABCD项目分析
    第七周学习进度
    第六周学习进度
    构建之法阅读笔记03
    [算法] 求x的n次方的一种for循环实现
    [算法]分解质因数
    通过索引操作数组
    [swift入门] 数据类型
    二叉排序树 常用函数小结
    剑指 Offer 54. 二叉搜索树的第k大节点 做题小结
  • 原文地址:https://www.cnblogs.com/yousiki/p/6362502.html
Copyright © 2011-2022 走看看