zoukankan      html  css  js  c++  java
  • 矩阵快速幂

    题目背景
    矩阵快速幂

    题目描述
    给定 n ( imes) n的矩阵A,求({A^k})

    输入格式
    第一行两个整数n,k接下来n行,每行n个整数,第i行的第j个数表示({A_{i,j}}).

    输出格式
    输出({A^k})
    共n行,每行n个数,第i行第j个数表示(langle{A^k} angle_{i,j}),每个元素对(10^9+7)取模。

    输入输出样例

    输入#1    输出#1
    2 1       1 1
    1 1       1 1
    1 1

    说明/提示
    对于100%的数据:1<=n<=100,0<=k<=(10^{12})
    |(A_{i,j})|<=1000

    #include<cstdio>
    #include<cstring>
    #define ll long long
    
    using namespace std;
    
    int n;
    long long mod=1000000007;
    
    struct matrix
    {
    	ll a[105][105];
    	matrix()
    	{
    		memset(a,0,sizeof(a));
    	}
    	inline void build()
    	{
    		for(int i=1;i<=n;i++)
    			a[i][i]=1;	
    	}	
    }a;
    
    matrix operator * (const matrix &x,const matrix &y)
    {
    	matrix z;
    	for(int k=1;k<=n;k++)
    		for(int i=1;i<=n;i++)
    			for(int j=1;j<=n;j++)
    				z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j]%mod)%mod;
    	return z;
    }
    
    ll k;
    
    int main()
    {
    	scanf("%d%lld",&n,&k);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=n;j++)
    			scanf("%lld",&a.a[i][j]);
    	matrix ans;
    	ans.build();
    	do{
    		if(k&1)
    			ans=ans*a;
    		a=a*a;
    		k>>=1;
    	}while(k);
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=n;j++)
    			printf("%d ",ans.a[i][j]);
    		printf("
    ");
    	}	
    	return 0;	
    }
  • 相关阅读:
    【三】shiro入门 之 Realm
    【一】shiro入门 之 Shiro简介
    【二】shiro入门 之 身份验证
    [01] radio ,checkbox 表单文字对齐
    [02]时区时间获取
    【14】redux 之 redux-actions
    【02】webpack 之 入门
    【13】react 之 redux(2)
    【12】react 之 redux(1)
    【11】react 之 flux
  • 原文地址:https://www.cnblogs.com/liumengliang/p/13298046.html
Copyright © 2011-2022 走看看