• 高斯消元学习


    1. 证明XOR满足交换律,结合律,是自身的逆运算。
      比如说,1^0 = 1   1^1 = 0  0^1 = 1 0^0 = 0
          1^1^0 = 0 = 1^0^1 = 0.
          a^b^a=b 即一个数异或两次相当于无效
    2. 从N个数中选出两个数,使XOR和最大。
    解法:
      我们知道两个数字之间的异或运算都是按位异或,也就是说把他们各自化成为二进制的形式,然后,每次查找与这个数字差别最大的数。
    比如现在有,0111,0000,0101,1010. 我们查找最大的异或结果。
    可以建立一个trie树。
     
     
     
    二进制的比较,要从高位到低位,要使异或和最大,那么我们就枚举第i个数字,查找与第i个数字相差最大的数字是多少,高位优先。
    比如说,查找与0 1 1 1 相互异或后得到的最大值的数字是多少,我们的思路肯定是从root开始,依次从高位开始寻找与0 1 1 1 相异或的数字,如果遇到相同的位置,那么就妥协处理。
     
    3. lN个点的边带权的树,找一条路径使XOR和最大。
    解法:
      任选一个根,h_i表示的是从根节点到节点i的路径的XOR和
      X到Y的路径XOR和表示为h_x XOR h_y
     
    4. 从N个数中选出若干个,使XOR和为K,给出方案或指出不可行。
    解法:
      X_i 为0,表示的是第i个数不选,X_i为1,表示的是第i个数选。
    现在考虑K的第p位的情况:
      如果K的第p位是1,则第p个二进制位为1的数字有奇数个被选择
      如果K的第p位是0,则第p个二进制位为1的数字有偶数个被选择
      得到方程X_i1+X_i2+X_i3+...+X_is = Kp ( + 都是XOR )
    联立60个方程,方程的解,等价于原问题的解。
     
  • 相关阅读:
    bzoj1297 [SCOI2009]迷路
    bzoj1085 [SCOI2005]骑士精神
    bzoj1009 [HNOI2008]GT考试
    uoj#73 【WC2015】未来程序
    bzoj1016 [JSOI2008]最小生成树计数
    bzoj2818 Gcd
    python递归——汉诺塔
    python参数
    python函数
    为什么会出现__pycache__文件夹?
  • 原文地址:https://www.cnblogs.com/wikioibai/p/4783149.html
Copyright © 2020-2023  润新知