高斯消元

大暴力

应用:求解线性方程

前置知识:矩阵操作

对于方程组

{a11x1+a12x2++a1nxn=m1a21x1+a22x2++a2nxn=m2an1x1+an2x2++annxn=mn

我们将他的系数和结果掏出来组成一个n×(n+1)的矩阵来模拟消元操作

目标:把矩阵化成一个上三角的形式

[1a12a13a1nb101a23a2nb21bn]

直观理解:

那么我们就能解出xn,再一步步回代即可

步骤:

eg:

[0.020.01000.02221010121400100200800]

枚举待消主元,对于第i个主元,进行如下操作:

1.找到系数非零行

我们找到当前主元的系数绝对值最大且不为0的行,把他换到第i行来作为上三角的一部分,然后把剩下行中的该主元消掉,变成

[221010.020.01000.020121400100200800]

2.化简第i行系数

把主元的系数化为1,方便后续操作

[110.500.50.020.01000.020121400100200800]

3.消元

枚举后边的行,对于枚举到的第k(k[i+1,n])行,在上一步的简化下,该行每个系数所减去的值就是该行主元的系数乘上第i行对应系数得到的值

[110.500.50.021×0.020.011×0.0200.5×0.0200.020.5×0.020121400100200800]

依次搞过去就行了,大模拟

特判

  • 无解:出现0,0,0,,bi0的情况

  • 无穷解:上述情况中bi=0

EXTRA:

异或方程组

取模方程组

P4035 [JSOI2008] 球形空间产生器

设球心O(x1,x2,,xn)

对于第i,i+1个点而言,满足

j=1n(ai,jxj)2=j=1n(ai+1,jxj)2

二次方刚好约掉,化简一下就是

j=1n2(ai+1,jai,j)xj=j=1n(ai+1,j2ai,j2)

n+1个点,刚好n个方程,造就完了

开关问题

已知初始状态pi,每操作一个开关,与它相关的开关(各开关间的关系给定)也变为相反的状态,求达到目标状态qi的方案数

首先有几个点要明确一下

  • 结果与顺序无关

  • 一个开关只需操作一次(第二次操作会抵消掉第一次操作,相当于没操作)

虽然似乎很显然,但其实挺重要的

我们把关系放到一个矩阵中,ai,j=1表示操作开关j会影响开关i

这样定义是因为j表示未知数(主元),i代表一个方程,矩阵a相当于是一个系数的角色,所以这么搞

设第i个开关操作了xi

那么对于第i个开关来说,他的最终状态就是所有与它有关(包括他自己)的开关操作完后的最终态,即ai,j×xi

接下来考虑用什么运算叠加每一个开关造成的影响

这时有一个性质2来了:所有开关至多操作一次

也就是说:xi,xi1

进一步的,ai,j×xi01

结合经验,奇数个操作改变状态,偶数个不改变

所以可以使用异或

那么就得到了

{p1a11x1a12x2a1nxn=q1p2a21x1a22x2a2nxn=q2pnan1x1an2x2annxn=qn

但似乎有一个问题:这样的方程组怎么解呢,它又有几个解(即题目中的方案数)呢?

解法可以参考线性方程组的解法,加(没有减的转化,因为不需要化简系数)改异或,考虑解的数量

对于方程来说只有三种情况:无解,唯一解,无穷解

前两个好说,我们来想想无穷解的内涵

无穷解就是出现了有若干个变量可以取任意值,这些变量通常称为自由元

假设有k个自由元,结合xi{0,1},那方案数就是这些自由元取值的组合,为2k

P2973 [USACO10HOL] Driving Out the Piggies G

设每个节点被污染的概率是xi,度数是di

古典概型,所以只有加或乘

考虑炸弹如何转移到i节点

  • 节点1:要么瞬间爆炸,要么从别的点转移回来,并且炸弹没炸

x1=pq+(1,j)间有边xj×1dj(从j到i的概率)×(1pq)(不炸的概率)

  • 其他节点:只可能转移而来

xi=(i,j)间有边xj×1dj×(1pq)

但这样太抽象了不像方程组,而且看上去是实时更新的

但是次数没有限制,不可能是遍历若干次后更新更出来的

其实可以这样理解:这些方程是最终态满足的条件

那就解罢

注,严格的证明涉及到期望,先咕咕

一个n×m,由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对3取模,周围的四个方格加上1后对3取模,请你在2nm操作次数内让整个矩阵变成0。输出一种方案

其实这个题略微类似于开关问题,只不过那道题模数是2

先明确这道题中除法统一改为求逆元

设每个方格被修改次数是xi,j,初始值ai,j
类比开关问题可得:xi,j2

一个方格受左邻右舍的影响,则有

ai,j+2×xi,j+1×(xi1,j+xi+1,j+xi,j+1+xi,j1)0(mod3)

这样一来有个难点:xi,j如何用一维表示

要不直接开个三维数组吧

对于xi,j,他“头上”的矩形中有(i1)×m个数,他是这一行的第j个,那他的编号就是(i1)×m+j

接下来构造方案

我想想

对于自由元,直接取零,对于非自由元,移项后再翻成正的,取最终值

搞就完了

(PS:这道题中一个数的逆元就是他自己(doge))

posted @   why?123  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示