UVA 11551 – Experienced Endeavour(矩阵高速幂)[通俗易懂]

UVA 11551 – Experienced Endeavour(矩阵高速幂)

大家好,又见面了,我是全栈君。

UVA 11551 – Experienced Endeavour

题目链接

题意:给定一列数,每一个数相应一个变换。变换为原先数列一些位置相加起来的和,问r次变换后的序列是多少

思路:矩阵高速幂,要加的位置值为1。其余位置为0构造出矩阵,进行高速幂就可以

代码:

#include <cstdio>#include <cstring>const int N = 55;int t, n, r, a[N];struct mat {    int v[N][N];    mat() {memset(v, 0, sizeof(v));}    mat operator * (mat c) {	mat ans;	for (int i = 0; i < n; i++) {	    for (int j = 0; j < n; j++) {		for (int k = 0; k < n; k++)		    ans.v[i][j] = (ans.v[i][j] + v[i][k] * c.v[k][j]) % 1000;	    }	}	return ans;    }};mat pow_mod(mat x, int k) {    mat ans;    for (int i = 0; i < n; i++) ans.v[i][i] = 1;    while (k) {	if (k&1) ans = ans * x;	x = x * x;	k >>= 1;    }    return ans;}int main() {    scanf("%d", &t);    while (t--) {	scanf("%d%d", &n, &r);	for (int i = 0; i < n; i++) scanf("%d", &a[i]);	int x; mat Mat;	for (int i = 0; i < n; i++) {	    scanf("%d", &x);	    int b;	    while (x--) {		scanf("%d", &b);		Mat.v[i][b] = 1;	    }	}	Mat = pow_mod(Mat, r);	for (int i = 0; i < n; i++) {	    int ans = 0;	    for (int j = 0; j < n; j++) {		ans = (ans + a[j] * Mat.v[i][j]) % 1000;	    }	    printf("%d%c", ans, (i == n - 1 ? '\n' : ' '));	}    }    return 0;}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115544.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么做app软件_软件限制设备登录怎么激活成功教程

    怎么做app软件_软件限制设备登录怎么激活成功教程项目描述客户端,基于H5Plus使用MUI框架开发的APP,运行环境为小米手机真机测试。服务端,使用SpringBoot搭建的项目,运行环境为SpringBoot内置Tomcat,部署端口为8090。问题分析电脑和手机连接同一个WiFi,手机点击按钮,触发Ajax请求,无法访问在笔记本电脑上部署的SpringBoot后台。原Ajax请求地址,使用的是localhost,打开电脑cmd窗口,输入ipconfig查询电脑的ipv4地址,修改localhost为电脑私网IP。mui.ajax(“ht

    2022年9月6日
    6
  • 引起cpu流水线阻塞的三个原因

    引起cpu流水线阻塞的三个原因1、多个任务在同一时间周期内争用同一个流水段(资源冲突)例如,假如在指令流水线中,如果数据和指令是放在同一个储存器中,并且访问接口也只有一个,那么,两条指令就会争用储存器;在一些算数流水线中,有些运算会同时访问一个运算部件。2、数据依赖(数据相关)比如,A运算必须得到B运算的结果,但是,B运算还没有开始,A运算动作就必须等待,直到A运算完成,两次运算不能同时执行。3、 条件转移的影响(条件转移)如…

    2022年8月20日
    11
  • StackOverflow 提问艺术[通俗易懂]

    StackOverflow 提问艺术[通俗易懂]在黑客的世界里,当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。本指南将教你如何正确的提问以获得你满意的答案。https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md转载于:https://www.cnblogs.com/s…

    2022年6月23日
    34
  • ssm框架理解

    ssm框架理解SSM框架理解最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫不

    2022年7月4日
    23
  • Msfconsole_msfconsole渗透

    Msfconsole_msfconsole渗透msfconsole理论msfconsole理论‍‍在MSF里面msfconsole可以说是最流行的一个接口程序。很多人一开始碰到msfconsole的时候就害怕了。那么多复杂的命令语句需要学习,但是msfconsole真的是一个强大的接口程序。Msfconsole提供了一个一体化的集中控制台。通过msfconsole,你可以访问和使用所有的metasploit的插件,payloa

    2022年9月7日
    2
  • 磁盘显示没有初始化找到数据法子[通俗易懂]

    磁盘显示没有初始化找到数据法子[通俗易懂]没有初始化是因为分区表损坏了,导致移动硬盘出现没有初始化。磁盘显示没有初始化找到数据法子没有初始化是因为分区表损坏了,导致移动硬盘出现没有初始化。磁盘显示没有初始化找到数据法子工具/软件:光明数据恢复软件步骤1:程序打开后,直接双击需要恢复的物理盘,没有初始化需要从磁盘恢复文件。步骤2:坐等软件扫描完成一般需要几分钟到半个小时,稍微耐心等下即可。步骤3:打钩所有需要恢复的文件,然后点右上角的保存,《另存为》按钮,将打钩的文件拷贝出来。步骤4:最后一步只需要等程序将文件复制完成就可以了

    2022年9月21日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号