hdoj 3521 An easy Problem(矩阵乘法)

原创 2012年03月25日 00:14:41

【题目大意】:

其中A是给定矩阵,I是单位矩阵。


【解题思路】:直接暴力做吧...


【代码】:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
                   
using namespace std;
                   
#define eps 1e-8
#define pi acos(-1.0)
#define inf 1<<30
#define linf 1LL<<60
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long

struct Mart{
    double mat[105][105];
};
Mart a,ans1,ans;
int n;
double k;

Mart mart_multiply(Mart a,Mart b){
    Mart c;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++){
            c.mat[i][j]=0;
            for(int k=1; k<=n; k++)
                c.mat[i][j]=c.mat[i][j]+a.mat[i][k]*b.mat[k][j];
        }
    return c;
}

void copy(Mart p){
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            a.mat[i][j]=p.mat[i][j];
}

void solve_mart_power(int np){
    Mart p,q;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++){
            p.mat[i][j]=ans1.mat[i][j];
            if(i==j)  q.mat[i][j]=1.0;
            else  q.mat[i][j]=0.0;
        }
    if(np==0) copy(q);
    else {
        while(np!=1){
            if(np&1){
                np--;
                q=mart_multiply(p,q);
            }
            else{
                np=np/2;
                p=mart_multiply(p,p);
            }
        }
        p=mart_multiply(p,q);
        copy(p);
    }
    return ;
}

int main(){
    while (~scanf("%d",&n)){
        if(n==0)
            break;
        for (int i=1; i<=n; i++)
            for (int j=1; j<=n; j++){
                scanf("%lf",&a.mat[i][j]);
                ans1.mat[i][j]=a.mat[i][j];
                ans.mat[i][j]=0;
            }
        k=1;
        for (int i=1; i<=50; i++){
            solve_mart_power(i-1);
            if (i!=1)  k=k*((i-1)*1.0);
            for (int j=1; j<=n; j++){
                for (int l=1; l<=n; l++){
                    ans.mat[j][l]=ans.mat[j][l]+a.mat[j][l]/k;                   
                }
            }
        }
        for (int i=1; i<=n; i++){
            for (int j=1; j<=n; j++)
                printf("%.2f ",ans.mat[i][j]);
            printf("\n");
        }
    }
    return 0;
}


相关文章推荐

hdoj 1757 A Simple Math Problem(转化为矩阵+矩阵乘法)

【题目大意】:If x If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10); And ...
  • new_wu
  • new_wu
  • 2012年04月07日 01:44
  • 363

hdoj5475An easy problem【线段树】

An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)...

hdu 4565 So Easy! /2013 ACM-ICPC 长沙赛区全国邀请赛A题 矩阵乘法

#include #include #include #include #include #include using namespace std; #define LL __int64 ...

【主席树】 HDOJ 4729 An Easy Problem for Elfness

在树上建立主席树。。。然后如果a>=b,那么就只建边,初始值主席树上查最小值。否则在建一条边或者不建边。不建边的情况下,在主席树上找最小的限制解。。 #include #include #inc...

HDOJ 4549 - M斐波那契数列 费马小定理,矩阵乘法

矩阵乘法求线性关系的数列...而本数列不是线性关系..无法对F(n)构造矩阵直接用矩阵乘法解决...       不难发现若取log F(n)...则log F(n) = log F(n-1) + l...
  • kk303
  • kk303
  • 2013年06月02日 16:54
  • 1297

hdu 3509 Buge's Fibonacci Number Problem(矩阵乘法+二项式)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=3509 Buge's Fibonacci Number Problem Time Limit: ...

A Simple Math Problem 矩阵乘法

 A Simple Math Problem Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java...

HIT 2060 Fibonacci Problem Again(矩阵乘法)

题目:http://acm.hit.edu.cn/hoj/problem/view?id=2060 Fibonacci Problem Again My Tags   (Edit) ...

hdu 1757 A Simple Math Problem(矩阵乘法)

题目分析:由题意可构造矩阵matrix[10][10],maze[1][1]=a0,maze[2][1]=a1,,,maze[10][1]=a9,,,,maze[1][2]=maze[2][3]= ...
  • wconvey
  • wconvey
  • 2012年09月11日 21:51
  • 540

Fzoj 1692 Problem 1692 Key problem [特殊矩阵的n^2复杂度求矩阵乘法]

题目链接:acm.fzu.edu.cn/problem.php?pid=1692 题目的意思比较
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj 3521 An easy Problem(矩阵乘法)
举报原因:
原因补充:

(最多只允许输入30个字)