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...