zoukankan      html  css  js  c++  java
  • 「模板」矩阵快速幂

    <题目链接>

    大幅度照抄队友的,觉着自己有些侵权,不大好意思发。

    原版,戳友链第一个……

    然而还是不要脸地发一个。

    #include <cstdio>
    #include <cstring>
    const int MAXN=110,p=1e9+7;
    int n;
    long long k;
    class matrix
    {
    	public:
    		matrix(void)
    		{
    			memset(c,0,sizeof c);
    		}
    		void Read(void)
    		{
    			for(int i=1;i<=n;++i)
    				for(int j=1;j<=n;++j)
    					scanf("%lld",&c[i][j]);
    		}
    		void Print(void)
    		{
    			for(int i=1;i<=n;++i)
    			{
    				for(int j=1;j<=n;++j)
    					printf("%lld ",c[i][j]);
    				printf("
    ");
    			}
    		}
    		void Pow(long long k)
    		{
    			matrix a=(*this),ans;
    			for(int i=1;i<=n;++i)
    				ans.c[i][i]=1;
    			while(k)
    			{
    				if(k&1LL)
    					ans=ans*a;
    				a=a*a;
    				k>>=1;
    			}
    			memcpy(c,ans.c,sizeof ans.c);
    		}
    		matrix operator *(const matrix &b) const
    		{
    			matrix t,a=(*this);
    			for(int i=1;i<=n;++i)
    				for(int j=1;j<=n;++j)
    				{
    					t.c[i][j]=0;
    					for(int k=1;k<=n;++k)
    						(t.c[i][j]+=a.c[i][k]*b.c[k][j])%=p;
    				}
    			return t;
    		}
    	private:
    		long long c[MAXN][MAXN];
    }s;
    int main(int argc,char *argv[])
    {
    	scanf("%d %lld",&n,&k);
    	s.Read();
    	s.Pow(k);
    	s.Print();
    	return 0;
    }
    

    感谢队友的不控诉之恩。

  • 相关阅读:
    UEditor 编辑模板
    Task ProgressBar模拟现实完成后显示TextBox
    Java Lambda map返回部分属性
    Socket编程
    字节流和字符流
    File类
    volatile的作用和原理
    Java四种引用类型
    ThreadLocal
    孤儿进程和僵尸进程
  • 原文地址:https://www.cnblogs.com/Capella/p/8066089.html
Copyright © 2011-2022 走看看