• POJ 3233 Matrix Power Series(二分等比求和)


    Matrix Power Series

    【题目链接】Matrix Power Series

    【题目类型】二分等比求和

    &题解:

    这题我原来用vector写的,总是超时,不知道为什么,之后就改用数组了,照着别人的代码敲了一遍

    【时间复杂度】O(logn)

    &代码:

    #include <cstdio>
    #include <bitset>
    #include <iostream>
    #include <set>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <vector>
    using namespace std;
    #define INF 0x3f3f3f3f
    typedef long long ll;
    const int N= 30 +9;
    
    struct Matrix
    {
    	int m[N][N];
    };
    Matrix I;
    int n,k,M;
    
    Matrix add(Matrix a,Matrix b)
    {
    	Matrix c;
    	for(int i=0;i<n;i++)
    		for(int j=0;j<n;j++)
    			c.m[i][j]=(a.m[i][j]+b.m[i][j])%M;
    	return c;
    }
    
    Matrix multi(Matrix a,Matrix b)
    {
    	Matrix c;
    	for(int i=0;i<n;i++){
    		for(int j=0;j<n;j++){
    			c.m[i][j]=0;
    			for(int k=0;k<n;k++)
    				c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%M;
    		}
    	}
    	return c;
    }
    Matrix power(Matrix A,ll n)
    {
    	Matrix ans=I;
    	while(n){
    		if(n&1)
    			ans=multi(ans,A);
    		A=multi(A,A);
    		n>>=1;
    	}
    	return ans;
    }
    
    Matrix sum(Matrix A,ll k)
    {
    	if(k==1) return A;
    	Matrix t=sum(A,k/2);
    	Matrix cur=power(A,k/2+(k&1));
    	t=add(t,multi(t,cur));
    	if(k&1) t=add(t,cur);
    	return t;
    }
    
    int main()
    {
    	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    //	freopen("E:1.txt","r",stdin);
    	while(cin>>n>>k>>M){
    		Matrix A;
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++){
    				cin>>A.m[i][j];
    				A.m[i][j]%=M;
    			}
    			I.m[i][i]=1;
    		}
    		Matrix ans=sum(A,k);
    		for(int i=0;i<n;i++){
    			for(int j=0;j<n;j++)
    				cout<<ans.m[i][j]<<" ";
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    Python os 模块
    Python sys 模块
    [SAP BASIS]How to kill process in SAP ?
    linux lsof 详解
    [ORACLE] Oracle 索引失效总结
    [SAP BASIS] [TMS] 更改 Backup-Domain-Controler as Domain Controller|将TMS备用域控制器改为主域控制器
    python 生产者消费者模型
    Python 多线程
    python queue 模块
    [Linux]ipcs,ipcm 命令详解
  • 原文地址:https://www.cnblogs.com/s1124yy/p/6652690.html
Copyright © 2020-2023  润新知