首页 > 其他分享 >矩阵快速幂

矩阵快速幂

时间:2024-03-21 22:12:04浏览次数:21  
标签:return int 矩阵 long P3390 快速 define

debug:重载乘号的时候要把两个传进来的矩阵用起来

// Problem: P3390 【模板】矩阵快速幂
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3390
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
using namespace std;
#define ll long long
# define int long long
#define ull unsigned long long
#define pii pair<int,int>

#define baoliu(x, y) cout << fixed << setprecision(y) << x
#define endl  "\n"
#define debug1(x) cerr<<x<<" "
#define  debug2(x) cerr<<x<<endl
const int N = 2e5 + 10;
const int M = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const int mod =1e9+7;
const double eps = 1e-8;
int n, m;
int k;
struct matrix{
	int c[101][101];
	matrix(){memset(c,0,sizeof c);}
};
matrix operator*(matrix &a,matrix &b){
	matrix res;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				res.c[i][j]+=(a.c[i][k]*b.c[k][j])%mod;
				res.c[i][j]%=mod;
			}
		}
	}
	return res;
}
matrix pow(matrix &a,int k){
	matrix res;
	for(int i=1;i<=n;i++)res.c[i][i]=1;
	while(k){
		if(k&1)res=(res*a);
		a=a*a;
		k>>=1;
	}
	return res;
}
void solve(){
	cin>>n>>k;
	matrix a;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a.c[i][j];
			//cerr<<a.c[i][j]<<" ";
		}
		//cerr<<endl;
	}
	matrix ans=pow(a,k);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<ans.c[i][j]<<" ";
		}
		cout<<endl;
	}
	
}
signed main() {
    cin.tie(0);
    
    ios::sync_with_stdio(false);

    int t;
   //cin>>t;
     t=1;
    while (t--) {
solve();
    }
    return 0;
}

标签:return,int,矩阵,long,P3390,快速,define
From: https://www.cnblogs.com/mathiter/p/18088356

相关文章

  • 矩阵乘法
    intn,m;intk;structmatrix{ intc[101][101]; matrix(){memset(c,0,sizeofc);} };matrixoperator*(matrix&a,matrix&b){ matrixt; for(inti=1;i<=n;i++){ for(intj=1;j<=k;j++){ for(intg=1;g<=m;g++){ t.c[i][j]+=a.c[i][g]*......
  • 记忆化搜索 —— Leetcode 2684. 矩阵中移动的最大次数
    题目如下:给你一个下标从 0 开始、大小为 mxn 的矩阵 grid ,矩阵由若干 正 整数组成。你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历 grid :从单元格 (row,col) 可以移动到 (row-1,col+1)、(row,col+1) 和 (row+1,col+1) 三个单元......
  • MATLAB学习笔记6:矩阵的操作1
    说了三篇各种矩阵的创建,终于进行到下一部分了,太不容易了,今天我们来说说矩阵的操作,说白了就是对矩阵进行一些我们平时计算需要在纸上操作的步骤,用软件肯定要方便得多1.矩阵的拼接这个还是很好理解嘛,比如两个3*3的矩阵就可以横着或者竖着拼接到一起,而4*5与4*6的矩阵就只能横着......
  • 系统开发中的快速测试与调试策略
    在日新月异的软件开发领域中,如何高效地进行测试和调试工作,确保软件质量,成为了每个开发团队必须面对的重要问题。本文旨在探讨如何在系统开发过程中实现快速测试和调试,以提高开发效率,降低项目风险。答案:在系统开发过程中实现快速测试和调试,关键在于采用自动化测试工具、构建......
  • AI新工具(20240321) 又一个开源的Sora实现;高质量动漫风格图像的文本到图像模型;字节跳
    ✨1:Mora利用多智能体合作生成视频任务的多智能体框架Mora是一种多智能体框架,专为通用视频生成任务设计。它通过多个视觉智能体的协作,实现了在多种视频生成任务中的高质量输出,旨在复制并扩展OpenAISora的能力。以下是通俗语言总结的Mora功能以及可能的使用情景......
  • 【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (I
    【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC2024)大会主题:(主题包括但不限于,更多主题请咨询会务组苏老师)区块链:区块链技术和系统分布式一致性算法和协议块链性能信息储存系统区块链可扩展性区块链分散自治组织区......
  • 【干货】Java开发者快速上手.NET指南
    前言前几天有小伙伴在技术群里发了一个微软官方出的:适用于Java开发人员的.NET快速入门免费电子书,今天大姚来分享一下Java开发者想要快速上手.NET有哪些教程和优质资料。微软适用于Java开发人员的.NET快速入门指南下载阅读地址:https://dotnet.microsoft.com/zh-cn/campaigns/do......
  • NumPy的矩阵运算
    #作者:小恒不会java#时间:2024年3月1日#微信:a13551458597importnumpyasnp#创建一个2x3的矩阵AA=np.array([[1,2,3],[4,7,9]])#获取矩阵A的形状shape_A=A.shape#对矩阵A进行转置运算得到矩阵BB=A.T#使用numpy的matmul函数进行矩阵乘法运算(注意......
  • 中考英语首字母快速突破012-2021上海青浦英语二模-Earth Hour: A Global Call for Env
    PDF格式公众号回复关键字:ZKSZM012原文​WhatisEarthHour?​EarthHourisorganizedbytheWorldWideFundforNature(WWF)andit’sabigeventusuallyattheendofMarcheveryyear.Onthisevening,people‘godark’-thatis,switcho......
  • MySQL中如何快速定位占用CPU过高的SQL
    作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 以一......