zoukankan      html  css  js  c++  java
  • 高斯入门

    高斯入门

    小结

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

    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_kverb'%')的概率往某个方向走(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)大就相当于二进制数取相应位的值求异或和即可。

    代码

  • 相关阅读:
    【需求征集系统】打卡(五)
    【需求征集系统】打卡(五)
    《需求分析与系统设计》阅读笔记(一)
    每周总结【2020/10/24】————Redis与Mongodb初学
    【需求征集系统】打卡(四)
    【需求征集系统】打卡(三)
    初步自学Java小结
    关于“教室派”APP的使用报告和相关建议
    冲刺第一天
    结对开发之求环形数组的最大值
  • 原文地址:https://www.cnblogs.com/mcginn/p/5797579.html
Copyright © 2011-2022 走看看