矩陣求逆 折射傷害

2021-09-25 21:27:30 字數 1099 閱讀 3941

description

在乙個遊戲中有n個英雄,初始時每個英雄受到數值為ai的傷害,每個英雄都有乙個技能「折射」,即減少自己受到的傷害,並將這部分傷害分攤給其他人。對於每個折射關係,我們用數對(xi,yi,zi)來表示xi將自己受到傷害去掉zi的比例,將這些傷害轉移給yi(xi,yi是整數,zi是實數)。

求出經過反覆折射後最後每個英雄受到的實際總傷害。

input

第一行乙個正整數:n,表示有n個英雄,第二行n個整數ai,依次表示每個英雄受到的初始傷害。第三行乙個正整數m,表示有m對折射關係。接下來m行,每行三個數xi,yi,zi,表示xi將自己受到傷害去掉zi的比例,將這些傷害轉移給yi。

output

輸出n行,第i行表示第i個英雄最後受到的實際總傷害。保留六位小數。

考場上的方法太複雜了。。。

記英雄第一波受的傷害的矩陣為a

先不將折射傷害分配給其他人,受到的削弱傷害的比例矩陣為b

第一波傷害後,分配傷害的矩陣為t

則最終每個英雄承受傷害的矩陣s

s=a*b+a*t*b+a*t^2*b+a*t^3*b+......

又知1+x+x^2+x^3+x^4+...=1/(1-x)

所以s=a*(i-t)^(-1)*b

矩陣求逆即可

如何求逆?

對於矩陣a,在右邊合併元矩陣i

直接高斯消元

注意要將交換後的行換回來

然後去原來元矩陣i那部分的矩陣

即為a的逆矩陣a^(-1)

這方法太麻煩了

直接將關係列方程高斯消元解就好了嘛。。。

沒事,順便學了個矩陣求逆,不虧

伴隨矩陣求逆矩陣

在之前的文章 線性代數之矩陣 中已經介紹了一些關於矩陣的基本概念,本篇文章主要就求解逆矩陣進行進一步總結。我們先看例子來直觀的理解什麼是余子式 minor,後邊將都用英文minor,中文的翻譯較亂 這個例子 我們假設矩陣為a 中我們看到a 1,1 的minor就是將a 1,1 所在的行和列刪除後剩下...

矩陣的求逆

最近做乙個加密演算法遇到需要計算矩陣的逆,閒著無聊,記錄一下,以後免得再麻煩。include include include define max 20 define e 0.000000001 計算矩陣src的模 double calculate a double src max int n fo...

模板 矩陣求逆

求乙個 n times n 的矩陣的逆矩陣。答案對 10 9 7 取模。在原矩陣右邊接乙個單位矩陣,然後把原矩陣通過初等變換消成單位矩陣,右邊的單位矩陣做同樣的變換,就成了逆矩陣。什麼,為什麼?難得你不覺得這個想起來非常的正確麼 code luogu judger enable o2 include...