高斯入门

高斯入门

小结

  • 总体来说,入门题需要用到高斯消元或者类似做法的题目还是比较明显的,剩下只需要套板子即可。

HDU 5119 Happy Matt Friends

题意

  • \(N(N \le 40)\)个数\(a_i(a_i \le 10^6)\)
  • 求有多少种方案使得若干个\(a_i\)的异或和不小于\(M(M \le 10^6)\)

思路

  • 高斯消元求出线性基。
  • 枚举第\(i\)位表示在该位时异或和刚大于\(M\)
  • 假设线性基有\(x\)个,则每种异或和方案有\(2^{N-x}\)种。

代码


POJ 1830 开关问题

题意

  • \(N(N \le 28)\)个开关,开关具有关联性,即改变某个开关的状态,一些相关的开关也会改变状态。给出初始状态和末状态,求操作方案数。

思路

  • 这道题算是最基础的高斯消元题。
  • 每个开关列一个方程,变量为和当前开关相关的开关以及它本身,结果为初状态和末状态的异或值,表示是否改变开关状态。

代码


POJ 3185 The Water Bowls

题意

  • 一共有20个碗,1表示碗是盖着的,0表示正面朝上,每次翻转一个碗时,相邻的两个碗也会跟着翻转,问是否能把所有碗翻成正面朝上,若能求最少次数。

思路

  • 有无解问题仍然可以通过解方程判断。
  • 关键在于如何求出最少次数。高斯消元后,得到一组可行解,可枚举自由元状态,可能可以去掉一些可行解中的一些操作,在所有方案中取最小值即可。

代码


POJ 2065 SETI

题意

  • \(N\)个方程,每个方程为\(f(k)=\sum_{i=0}^{n-1}{a_ik^i(mod \verb' 'p)}\),求解(按照题意来讲,应该保证有且仅有一组解)。

思路

  • 明显的解方程,需要取模操作。

代码


HDU 4418 Time travel

题意

  • (题目有毒,看了半天没看懂)
  • 简单来讲,就是在一条数轴上有\(N(N \le 100)\)个点,每次会有\(P_k\verb'%'\)的概率往某个方向走\(k\)步,遇到边界会改变方向(即按0、1、2、3、2、1、0、1、2、...)这样的路线行走。
    给出初始位置\(X\)、末位置\(Y\)以及初始方向\(D\),求期望步数。

思路

  • 起始方向统一成往右走,若一开始往左走,则关于中间对称\(X\)\(Y\)坐标即可。
  • 初始一个长度为\(2N-2\)的数组a,表示所有可能的状态。因为一个点有两种状态,往左走和往右走。
  • 期望逆推,整体不存在拓扑序,所以需要用高斯消元解方程求得每个状态的期望。
  • 需要提前判定是否能从\(X\)走到\(Y\),某些\(P_k\)可能为0。

代码


HDU 3949 XOR

题意

  • \(N(N \le 10^4)\)个数\(A_i(1 \le A_i \le 10^{18})\)
  • 从这些数中取一些数进行\(XOR\)操作,得到一些值,\(Q(Q \le 10^4)\)次询问这些值中第\(K\)大的值。

思路

  • 用高斯消元的做法求出线性基,将这些基从小到大排序,则第\(K\)大就相当于二进制数取相应位的值求异或和即可。

代码

posted @ 2016-10-02 23:26  mcginn  阅读(240)  评论(0编辑  收藏  举报