矩阵快速幂: 网易2017实习生编程题 魔力手环
描述:
小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的后面一个数字是第一个),一旦某个位置的数字大于等于100就马上对100取模(比如某个位置变为103,就会自动变为3).现在给出这个魔力手环的构成,请你计算出使用k次魔力之后魔力手环的状态。
输入描述:
输入数据包括两行:
第一行为两个整数n(2 ≤ n ≤ 50)和k(1 ≤ k ≤ 2000000000),以空格分隔
第二行为魔力手环初始的n个数,以空格分隔。范围都在0至99.
输出描述:
输出魔力手环使用k次之后的状态,以空格分隔,行末无空格。
输入例子:
3 2
1 2 3
输出例子:
8 9 7
分析:
由于题目中的求值非常有规律,数字成环,且当前数字等于当前数字加上后面的一个数字,自然就可以联想到构造矩阵,而且看到操作次数那么大,肯定要么找规律,要么快速幂,然后我打表并没有发现什么规律,所以矩阵快速幂。
#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > mul(vector<vector<int> >a,vector<vector<int> >b)
{int m=a.size(),n=a[0].size(),k=b[0].size();vector<vector<int> > res(m,vector<int>(k,0));for(int i=0;i<m;i++)for(int j=0;j<k;j++)for(int f=0;f<n;f++)res[i][j] = (res[i][j]+a[i][f]*b[f][j])%100;return res;
}
vector<vector<int> > matrix_pow(vector<vector<int> > matrix,int k)
{int n=matrix.size();vector<vector<int> > mm(n,vector<int>(n,0));for(int i=0;i<n;i++)mm[i][i]=1;while(k){if(k&1)mm = mul(matrix,mm);matrix = mul(matrix,matrix);k>>=1;}return mm;
}
int main()
{int n,k;scanf("%d%d",&n,&k);vector<vector<int> > num;vector<int> t;int tmp;for(int i=0;i<n;i++){scanf("%d",&tmp);t.push_back(tmp);}num.push_back(t);vector<vector<int> > matrix(n,vector<int>(n,0));for(int i=0;i<n;i++){matrix[i][i]=1;matrix[(i+1)%n][i]=1;}vector<vector<int> > mm = matrix_pow(matrix,k);vector<vector<int> > ans = mul(num,mm);printf("%d",ans[0][0]);for(int i=1;i<ans[0].size();i++)printf(" %d",ans[0][i]);puts("");return 0;
}
矩阵快速幂: 网易2017实习生编程题 魔力手环相关推荐
- [网易2017实习生编程题] 魔力手环
[Problem 5]分饼干 题目 小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的 ...
- 矩阵快速幂+构造方法
与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...
- UVA10689 Yet another Number Sequence【数列+矩阵快速幂】
Let's define another number sequence, given by the following function: f(0) = a f(1) = b f(n) = f(n ...
- 2017网易笔试矩阵快速幂
昨天网易笔试,竟然除了矩阵快速幂的题目,日了狗了,离开acm好久了,忘得差不多了,囫囵吞枣补一下吧,哎,太菜了! 题目如下 小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使 ...
- 网易2017春招 魔力手环 矩阵快速幂
思路:将转换关系看做一个矩阵,此处的关系是前一个加上后一个: 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 ...
- POJ3070矩阵快速幂简单题
题意: 求斐波那契后四位,n <= 1,000,000,000. 思路: 简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...
- 15年第六届蓝桥杯第九题_(矩阵快速幂优化的动态规划)
垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...
- 又见斐波那契~矩阵快速幂入门题
链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...
- 2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 分组(矩阵快速幂套NTT优化dp)
题目链接:点击查看 题目大意:给出 nnn 个连续的小球,每次可以选择单独的一个或者相邻的两个小球分成一组,允许有剩余的小球,问恰好分成 k∈{1,2,3,⋯,m}k\in\{1,2,3,\cdots ...
最新文章
- 官宣!全球首富马斯克:创办这所“新大学”!
- 郑州升达学院计算机考试,第35次全国计算机等级考试报名工作通知
- 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
- 从追逐警报到捕获威胁:有效SOC的进化
- Protobuf生成Java代码(Maven)
- 机器人学 —— 机器人感知(Mapping)
- 体现临床实际基线疾病活动度的早期RA患者中, 治疗起效时间对临床和放射学的影响...
- JavaScript (十九):DOM对象其它操作
- golang for循环时修改自身的值
- 在线广告系统的架构变迁
- 抖音有网页版吗?抖音网页版,抖音电脑版
- 我的第一篇博客——鸡汤博
- iOS开发面试和底层学习视频整理合集
- 使用consul注册中心要求服务以自定义instance-id形式注册
- 笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...
- vue2 provide和inject的使用
- Docker 常用镜像
- word使用计算机题,(word)计算机基础考试试题及答案.doc
- 计算机的网线连接路由器的什么接口,网线插路由器哪个口
- 免费游戏代理平台和收费平台区别是什么?