HUST算法实践_POJ3233
题目传送门
问题描述
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), 设置两个数组:
a[31][maxn]
:a[i]
表示A2i−1A^{2^{i-1}}A2i−1对应的矩阵, 特别地, a[0]为单位矩阵b[31][maxn]
:b[i]
表示A1+A2+...+A2i−1A^1+ A^2+...+A^{2^{i-1}}A1+A2+...+A2i−1, 特别地, b[0]为空矩阵
我们可以通过以下方法得到上述的两个数组(涉及到的运算均为矩阵运算, 需通过相应的函数实现):
a[i] = a[i] * a[i]
b[i] = b[i-1] + b[i-1]*a[i-1]
得到数组a
和b
后, 我们对问题进行求解, 核心代码如下:
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相关推荐
- 深度学习算法实践(基于Theano和TensorFlow)
深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...
- 人脸验证 DeepID 算法实践
人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石 出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...
- SDCC 2015算法专场札记:知名互联网公司的算法实践
SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...
- 实时通信服务中的语音解混响算法实践
导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...
- 阿里妈妈品牌广告中的 NLP 算法实践
导读:本次分享的主题为阿里妈妈品牌广告中的 NLP 算法实践,主要内容包括: 1. 品牌广告业务模式与技术架构的简要介绍 2. NLP 算法在品牌搜索广告中的实践,以两个具体的算法问题展开:品牌意图识 ...
- 阿里妈妈流量反作弊算法实践
阿里妈妈是阿里巴巴集团旗下商业数字营销平台.依托阿里巴巴集团核心的商业数据和超级媒体矩阵,为数百万的广告主每年提供上千亿金额的广告服务. 2020年中国互联网广告市场规模达5292亿元,根据秒针< ...
- 机器学习经典算法实践_服务机器学习算法的系统设计-不同环境下管道的最佳实践
机器学习经典算法实践 "Eureka"! While working on a persistently difficult-to-solve problem, you disco ...
- asp.net从入门到精通配套课件_MATLAB从入门到算法实践第八期本周六直播
推荐Matlab算法经典课程,此课程已经经过7次升级和打磨,累计超过3000多人学习,想从零基础入门和想提高Matlab编程水平的同学推荐加入学习. 讲师介绍 董辰辉 Matlab 畅销书主编.上市公 ...
- C#经典算法实践,回顾往生,更是致敬《算法导论》
该文章的最新版本已迁移至个人博客[比特飞],单击链接 C#经典算法实践,回顾往生,更是致敬<算法导论> | .Net中文网 访问. 概述 本系列博文将会向大家介绍本人在钻研<算法导论 ...
- 微博多尺度序列推荐算法实践
今天给大家分享新浪微博机器学习算法专家谌贻荣博士在2021年全球机器学习ji s户大会上所做的分享<微博多尺度序列推荐算法实践.pdf>,关注推荐算法及其实践的伙伴们别错过啦!(到省时查报 ...
最新文章
- Servlet生命周期与工作原理
- bios get serialnumber 无法启动服务_联想笔记本BIOS升级教程
- mysql远程权限grant_mysql 赋给用户远程权限 grant all privileges on
- 利用OpenCV实现图像拼接的代码
- GDCM:gdcm::GroupDict的测试程序
- 如何处理My lead fiori应用的buffer问题
- 沉浸式全息本是什么_“全息投影”走进健身房,打造沉浸式健身体验室,想来试试吗?...
- window系统盘瘦身(开发)
- C++之临时对象、常引用和浅拷贝探究
- linux下安装chrome
- 以后你肯定会用到的,25个常用Matplotlib图的Python代码,可以不会不能没有,建议收藏
- 设计模式 | 原型模式
- 关于unity打包apk在手机上安装失败(-108)
- SQL 事务 begin tran、commit tran、rollback tran 的用法
- 英雄联盟|王者|穿越火线 bgm AI配乐大赛分享
- 大学计算机基础ppt重点,大学计算机基础.ppt
- 文艺爱好---英文单词
- 椭圆一般方程(ABCDEF)转椭圆参数方程(长短轴,几何中心)
- Sugar BI:如何设置数据可视化页面的用户权限
- python 离群值_python:删除离群值操作(每一行为一类数据)
热门文章
- Unity中实现3D拾取功能及其原理
- win7安装sqlserver2014
- WPF窗体更换背景颜色
- 金士顿服务器内存条怎么看型号,区分内存条型号的方法
- Windows 7下旋转屏幕的快捷键
- iOS---iPhoneXs iPhoneXs Max iPhoneXr
- 怎么重置计算机网络设置密码,怎么重新设置wifi密码_如何重新设置无线密码?-192路由网...
- 能连蓝牙键盘吗_300多的小键盘,颜值很能打,GANSS ALT71蓝牙双模机械键盘很香...
- 51单片机(At89C51)组成,引脚介绍
- java中的分号是什么作用,分号的作用是什么