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-1040-As Easy As A+B

Description These days, I am thinking about a question, how can I get a problem as easy as A+B? It ...
  • Ypopstar
  • Ypopstar
  • 2016年06月02日 20:15
  • 362

从零开始刷HDOJ(1)【HDOJ1000 - a+b problem】

从零开始刷HDOJ(1)【HDOJ1000 - a+b problem】题面A + B ProblemTime Limit: 2000/1000 MS (Java/Others) Memory ...
  • edward00324258
  • edward00324258
  • 2017年05月19日 16:32
  • 175

HDU 2601An easy problem-素数的运用,暴力求解

An easy problem Time Limit: 3000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %...
  • qq_18661257
  • qq_18661257
  • 2015年07月28日 11:57
  • 1001

hdojA+BProblemII

A + B Problem II Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) T...
  • R1986799047
  • R1986799047
  • 2014年11月27日 22:09
  • 441

HDU 6194 string string string (2017沈阳网赛-后缀数组)

题意: 告诉你一个字符串和k , 求这个字符串中有多少不同的子串恰好出现了k 次。 思路: 后缀数组。 我们先考虑至少出现k 次的子串, 所以我们枚举排好序的后缀i (sa[i]) 。 k段...
  • aozil_yang
  • aozil_yang
  • 2017年09月11日 08:20
  • 1042

杭电ACM 2055:An easy problem

原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45539811简单题,主要考虑出如何表示各个字母在字母表中的位置。我的AC代码...
  • Always2015
  • Always2015
  • 2015年05月06日 19:34
  • 756

杭电ACM 2055 An easy problem

http://acm.hdu.edu.cn/showproblem.php?pid=2055 #include using namespace std; int main() { int T...
  • xujinsmile
  • xujinsmile
  • 2012年08月06日 10:23
  • 1901

hdu5475 An easy problem

An easy problem Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T...
  • d_x_d
  • d_x_d
  • 2015年10月09日 19:48
  • 1564

V-An easy problem

对应输入而输出不难,此题难在怎样输入,对于scanf的字符型之后有空格或者回车的,循环输入时会读入回车,所以导致输入的并不是想输入的,查资料后用getchar解决,可以去掉回车的影响...
  • nwpuyxf
  • nwpuyxf
  • 2018年01月17日 10:49
  • 12

HDU2601,An easy problem

该题确实在个简单的问题,因为可能形式很简单,但它又不是那么的简单。 如果这个题选择有两个for循环来写的话,那毫无疑问将超时,所以需要仔细分析一下,可以看出,N=i*j+i+j可以变形为:N+1=( ...
  • u013068502
  • u013068502
  • 2014年08月03日 14:17
  • 779
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj 3521 An easy Problem(矩阵乘法)
举报原因:
原因补充:

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