描述:
小易拥有一个拥有魔力的手环上面有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实习生编程题 魔力手环相关推荐

  1. [网易2017实习生编程题] 魔力手环

    [Problem 5]分饼干 题目 小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的 ...

  2. 矩阵快速幂+构造方法

    与快速幂一样,可以将递推式通过二进制的方式来进行优化,这个学了快速幂就是十分容易理解 大概的板子如下: struct mat///自己定义大小的矩阵 {ll m[11][11]; }; mat mul ...

  3. 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 ...

  4. 2017网易笔试矩阵快速幂

    昨天网易笔试,竟然除了矩阵快速幂的题目,日了狗了,离开acm好久了,忘得差不多了,囫囵吞枣补一下吧,哎,太菜了! 题目如下 小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使 ...

  5. 网易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 ...

  6. POJ3070矩阵快速幂简单题

    题意:       求斐波那契后四位,n <= 1,000,000,000. 思路:        简单矩阵快速幂,好久没刷矩阵题了,先找个最简单的练练手,总结下矩阵推理过程,其实比较简单,关键 ...

  7. 15年第六届蓝桥杯第九题_(矩阵快速幂优化的动态规划)

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  8. 又见斐波那契~矩阵快速幂入门题

    链接:https://www.nowcoder.com/acm/contest/105/G 来源:牛客网 题目描述 这是一个加强版的斐波那契数列. 给定递推式 求F(n)的值,由于这个值可能太大,请对 ...

  9. 2021-2022年度第三届全国大学生算法设计与编程挑战赛(秋季赛)- 分组(矩阵快速幂套NTT优化dp)

    题目链接:点击查看 题目大意:给出 nnn 个连续的小球,每次可以选择单独的一个或者相邻的两个小球分成一组,允许有剩余的小球,问恰好分成 k∈{1,2,3,⋯,m}k\in\{1,2,3,\cdots ...

最新文章

  1. 官宣!全球首富马斯克:创办这所“新大学”!
  2. 郑州升达学院计算机考试,第35次全国计算机等级考试报名工作通知
  3. 【专访】PP租车孙览江:与有梦想的人一拍即合,PM都有改变世界的小情怀
  4. 从追逐警报到捕获威胁:有效SOC的进化
  5. Protobuf生成Java代码(Maven)
  6. 机器人学 —— 机器人感知(Mapping)
  7. 体现临床实际基线疾病活动度的早期RA患者中, 治疗起效时间对临床和放射学的影响...
  8. JavaScript (十九):DOM对象其它操作
  9. golang for循环时修改自身的值
  10. 在线广告系统的架构变迁
  11. 抖音有网页版吗?抖音网页版,抖音电脑版
  12. 我的第一篇博客——鸡汤博
  13. iOS开发面试和底层学习视频整理合集
  14. 使用consul注册中心要求服务以自定义instance-id形式注册
  15. 笔记本计算机风扇声音大怎么办,教你怎么从解决笔记本风扇狂转、噪音过大!-电脑风扇声音大怎么办...
  16. vue2 provide和inject的使用
  17. Docker 常用镜像
  18. word使用计算机题,(word)计算机基础考试试题及答案.doc
  19. 计算机的网线连接路由器的什么接口,网线插路由器哪个口
  20. 免费游戏代理平台和收费平台区别是什么?

热门文章

  1. 纯CSS实现圆角阴影的折角效果
  2. C2 - Pokémon Army (hard version)(思维+差分/线段树+dp)详解
  3. 唐伯虎的诗,可能是改编的
  4. Adobe官方公布的RTMP协议规范
  5. vue中调用百度地图 获取经纬度
  6. Excel如何设置下拉列表
  7. Asp.Net Core MVC 使用Aspose.Cells从Excel获取数据
  8. 复制网页上不能复制的文字
  9. 什么是嵌入式软件开发?
  10. oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据