zoukankan      html  css  js  c++  java
  • 矩阵求逆 折射伤害

    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个英雄最后受到的实际总伤害。保留六位小数。

    Sample Input

    3
    
    1 0 2
    
    3
    
    1 2 0.3000
    
    1 2 0.2000
    
    2 1 0.5000

    Sample Output

    0.666667
    
    0.333333
    
    2.000000

    Data Constraint

    考场上的方法太复杂了。。。

    记英雄第一波受的伤害的矩阵为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)

    这方法太麻烦了

    直接将关系列方程高斯消元解就好了嘛。。。

    没事,顺便学了个矩阵求逆,不亏

  • 相关阅读:
    HDU-2072-单词数(字典树)
    HDU-1251-统计难题(字典树)
    POJ-3630-Phone List(字典树)
    Acwing-204-表达整数的奇怪方式(扩展中国剩余定理)
    Acwing-203-同余方程(扩展欧几里得)
    Acwing-202-最幸运的数字(同余, 欧拉定理)
    Acwing-201-可见的点(数学, 欧拉函数)
    sql2014 新建用户并登陆
    sql修改约束语法练习
    java中static作用详解
  • 原文地址:https://www.cnblogs.com/Darknesses/p/12002531.html
Copyright © 2011-2022 走看看