题目传送门

问题描述

Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.

输入

The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.

输出

Output the elements of S modulo m in the same way as A is given.

数据结构

采用一维数组存储矩阵, 某元素的行数用标号 / n得到, 列数用标号 % n得到.

算法思想

采用倍增算法(对倍增算法不熟悉的同学可以移步https://blog.csdn.net/MaTF_/article/details/122976711?spm=1001.2014.3001.5502), 设置两个数组:

  1. a[31][maxn]: a[i]表示A2i−1A^{2^{i-1}}A2i−1对应的矩阵, 特别地, a[0]为单位矩阵
  2. b[31][maxn]: b[i]表示A1+A2+...+A2i−1A^1+ A^2+...+A^{2^{i-1}}A1+A2+...+A2i−1, 特别地, b[0]为空矩阵

我们可以通过以下方法得到上述的两个数组(涉及到的运算均为矩阵运算, 需通过相应的函数实现):

  1. a[i] = a[i] * a[i]
  2. b[i] = b[i-1] + b[i-1]*a[i-1]

得到数组ab后, 我们对问题进行求解, 核心代码如下:

void solve(){int cnt=1;int temp_cnt[maxn];cpy(temp_cnt,a[0]);       //temp为当前处理过的次数最高的A的幂for(int i=29;i>=0;i--){if(k>=1<<i){mul(b[i+1],temp_cnt);pls(ans,b[i+1]);mul(temp_cnt,a[i+1]);k-=1<<i;}}
}

代码实现

#include<iostream>
#include<cstring>
#define maxn 901
using namespace std;/*倍增算法*/ int ans[maxn];
int c[maxn];
int a[31][maxn],b[31][maxn];
int n,k,m;void pls(int x[maxn],int y[maxn]){for(int i=0;i<n*n;i++){x[i]+=y[i];x[i]%=m;}
}
void prt(){for(int i=0;i<n*n;i++){cout<<ans[i]<<' ';if(i%n==n-1) cout<<'\n';}
}
void mul(int x[maxn],int y[maxn]){int temp[maxn];memset(temp,0,sizeof(temp));for(int i=0;i<n;i++){for(int j=0;j<n;j++){for(int k=0;k<n;k++){temp[i*n+j]+=(x[i*n+k]*y[k*n+j])%m;temp[i*n+j]%=m;} }}for(int i=0;i<n*n;i++) x[i]=temp[i];
}
void cpy(int x[maxn],int y[maxn]){for(int i=0;i<n*n;i++) x[i]=y[i];
}
void pre(){     //注意:a[1]对应2^0! cpy(a[1],c);cpy(b[1],c);for(int i=2;i<=30;i++){cpy(a[i],a[i-1]);mul(a[i],a[i-1]);cpy(b[i],b[i-1]);mul(b[i],a[i-1]);pls(b[i],b[i-1]);}
}
void solve(){int cnt=1;int temp_cnt[maxn];cpy(temp_cnt,a[0]);for(int i=29;i>=0;i--){if(k>=1<<i){mul(b[i+1],temp_cnt);pls(ans,b[i+1]);mul(temp_cnt,a[i+1]);k-=1<<i;}}
}
signed main(){cin>>n>>k>>m;for(int i=0;i<n*n;i++){cin>>c[i]; if(i%n==i/n) a[0][i]=1;else a[0][i]=0;}pre();solve();prt();return 0;
}

HUST算法实践_POJ3233相关推荐

  1. 深度学习算法实践(基于Theano和TensorFlow)

    深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...

  2. 人脸验证 DeepID 算法实践

    人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石  出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...

  3. SDCC 2015算法专场札记:知名互联网公司的算法实践

    SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...

  4. 实时通信服务中的语音解混响算法实践

    导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...

  5. 阿里妈妈品牌广告中的 NLP 算法实践

    导读:本次分享的主题为阿里妈妈品牌广告中的 NLP 算法实践,主要内容包括: 1. 品牌广告业务模式与技术架构的简要介绍 2. NLP 算法在品牌搜索广告中的实践,以两个具体的算法问题展开:品牌意图识 ...

  6. 阿里妈妈流量反作弊算法实践

    阿里妈妈是阿里巴巴集团旗下商业数字营销平台.依托阿里巴巴集团核心的商业数据和超级媒体矩阵,为数百万的广告主每年提供上千亿金额的广告服务. 2020年中国互联网广告市场规模达5292亿元,根据秒针< ...

  7. 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践

    机器学习经典算法实践 "Eureka"! While working on a persistently difficult-to-solve problem, you disco ...

  8. asp.net从入门到精通配套课件_MATLAB从入门到算法实践第八期本周六直播

    推荐Matlab算法经典课程,此课程已经经过7次升级和打磨,累计超过3000多人学习,想从零基础入门和想提高Matlab编程水平的同学推荐加入学习. 讲师介绍 董辰辉 Matlab 畅销书主编.上市公 ...

  9. C#经典算法实践,回顾往生,更是致敬《算法导论》

    该文章的最新版本已迁移至个人博客[比特飞],单击链接 C#经典算法实践,回顾往生,更是致敬<算法导论> | .Net中文网 访问. 概述 本系列博文将会向大家介绍本人在钻研<算法导论 ...

  10. 微博多尺度序列推荐算法实践

    今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到省时查报 ...

最新文章

  1. Servlet生命周期与工作原理
  2. bios get serialnumber 无法启动服务_联想笔记本BIOS升级教程
  3. mysql远程权限grant_mysql 赋给用户远程权限 grant all privileges on
  4. 利用OpenCV实现图像拼接的代码
  5. GDCM:gdcm::GroupDict的测试程序
  6. 如何处理My lead fiori应用的buffer问题
  7. 沉浸式全息本是什么_“全息投影”走进健身房,打造沉浸式健身体验室,想来试试吗?...
  8. window系统盘瘦身(开发)
  9. C++之临时对象、常引用和浅拷贝探究
  10. linux下安装chrome
  11. 以后你肯定会用到的,25个常用Matplotlib图的Python代码,可以不会不能没有,建议收藏
  12. 设计模式 | 原型模式
  13. 关于unity打包apk在手机上安装失败(-108)
  14. SQL 事务 begin tran、commit tran、rollback tran 的用法
  15. 英雄联盟|王者|穿越火线 bgm AI配乐大赛分享
  16. 大学计算机基础ppt重点,大学计算机基础.ppt
  17. 文艺爱好---英文单词
  18. 椭圆一般方程(ABCDEF)转椭圆参数方程(长短轴,几何中心)
  19. Sugar BI:如何设置数据可视化页面的用户权限
  20. python 离群值_python:删除离群值操作(每一行为一类数据)

热门文章

  1. Unity中实现3D拾取功能及其原理
  2. win7安装sqlserver2014
  3. WPF窗体更换背景颜色
  4. 金士顿服务器内存条怎么看型号,区分内存条型号的方法
  5. Windows 7下旋转屏幕的快捷键
  6. iOS---iPhoneXs iPhoneXs Max iPhoneXr
  7. 怎么重置计算机网络设置密码,怎么重新设置wifi密码_如何重新设置无线密码?-192路由网...
  8. 能连蓝牙键盘吗_300多的小键盘,颜值很能打,GANSS ALT71蓝牙双模机械键盘很香...
  9. 51单片机(At89C51)组成,引脚介绍
  10. java中的分号是什么作用,分号的作用是什么