思路:将转换关系看做一个矩阵,此处的关系是前一个加上后一个:

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 1

把给定的数组看做矩阵[a[0],a[1],a[2],a[3],a[4],a[5]],如果和上面的转换矩阵相乘会得到矩阵[a[0]+a[1], a[1]+a[2], a[2]+a[3], a[3]+a[4], a[4]+a[5], a[5]+a[0]],就是使用一次魔力的结果,使用第二次的话就用刚才得到的矩阵乘以转换矩阵,继续转换即可。

由于矩阵相乘符合结合律,就把后面的k次转换用矩阵快速幂计算,注意在矩阵相乘时要注意对100求余。

AC代码

#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 50 + 5;
typedef int state[maxn][maxn];
int w[maxn];
int n, k;struct node{int a[maxn][maxn];
};
const int mod = 100;
node mul(node &x, node &y) {node res;state &a = x.a, &b = y.a, &c = res.a;for(int i = 0; i < n; ++i) for(int j = 0; j < n; ++j) {int sum = 0;for(int k = 0; k < n; ++k) sum += a[i][k] * b[k][j]; c[i][j] = sum % mod;}return res;
}node power(int n, int k) {node ans, tmp;state &a = tmp.a;//初始化for(int i = 0; i < n; ++i)for(int j = 0; j < n; ++j) {ans.a[i][j] = tmp.a[i][j] = 0;}for(int i = 0; i < n; ++i) ans.a[i][i] = 1; for(int i = 0; i < n; ++i) {a[i][i] = 1;a[(i+1)%n][i] = 1;}while(k > 0) {if(k & 1) {ans = mul(ans, tmp);}tmp = mul(tmp, tmp);k >>= 1;}return ans;
}int main() {scanf("%d%d", &n, &k);for(int i = 0; i < n; ++i) {scanf("%d", &w[i]);}node ans = power(n, k);vector<int>a;for(int i = 0; i < n; ++i) {int sum = 0;for(int j = 0; j < n; ++j) sum += w[j]*ans.a[j][i];a.push_back(sum%mod);}for(int i = 0; i < n; ++i) {if(i == n-1) printf("%d\n", a[i]);else printf("%d ", a[i]);}return 0;
} 

如有不当之处欢迎指出!

网易2017春招 魔力手环 矩阵快速幂相关推荐

  1. 网易2017春招笔试真题编程题集合

    网易2017春招笔试真题编程题集合 题目来源:牛客网 https://www.nowcoder.com/profile/7952866/test/7811777/83061 1.双核处理 题目描述 一 ...

  2. 【网易2017春招】赶去公司 解题报告

    [网易2017春招]赶去公司 解题报告 标签(空格分隔): 牛客网 题目地址:https://www.nowcoder.com/questionTerminal/5c7657015d3d49369c4 ...

  3. 网易2017春招笔试真题编程题集合(5)——魔力手环

    小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的后面一个数字是第一个),一旦某个位置 ...

  4. 网易2017春招笔试真题编程题集合(2)——赶去公司

    时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X, ...

  5. 2、赶去公司--网易2017春招

    [编程题] 赶去公司 时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每 ...

  6. 网易2017春招笔试——工作安排

    工作安排 题目 现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作).现在需要进行工作安排,每位 ...

  7. 网易2017春招笔试——集合

    集合 题目 小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性. 小易的老师给了小易这样一个集合: S = { p/q | w ≤ p ≤ x, y ≤ q ≤ ...

  8. 网易2017春招[编程题]赶去公司@Java

    链接:https://www.nowcoder.com/questionTerminal/5c7657015d3d49369c49dd047e80b526 来源:牛客网 时间限制:1秒空间限制:327 ...

  9. 网易2017春招笔试——赶去公司

    赶去公司 题目 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0 ...

最新文章

  1. 【收集】Web开发工具
  2. instanceof 是什么意思
  3. c++ Segmentation fault (core dumped) 的一个实例
  4. 泰拉瑞亚手机版html,泰拉瑞亚1.2
  5. html5华文行楷字体代码,html5 支持的字体样式
  6. Horspool算法
  7. 全球十大咨询公司比较
  8. row_number() over (partition by....order by...)用法
  9. 微信支付元转分的正确姿势
  10. easyUI日期框的日期范围限制
  11. lol无限乱斗服务器,LOL2019新模式无限乱斗怎么玩 LOL无限乱斗玩法攻略
  12. 【学浪下载教程】02学浪下载之Fiddler学浪插件配置
  13. 乐吾乐2D可视化智慧光伏能源赋能方案
  14. Modeling Personalized Item Frequency Information for Next-basket Recommendation SIGIR2020
  15. 【计算几何】圆的面积并
  16. 【103】W3School-实用计算机技能在线学习
  17. 调LED大屏颜色方法
  18. 【经典阅读】CSAPP-3.2-程序的机器级表示-程序编码
  19. mozart-oz中有限域编程读书笔记
  20. Java黄金矿工小游戏,只需两小时完成,就是这么简单

热门文章

  1. 福布斯专栏:小米手机难成主流
  2. 新概念英语第四册41-48课(转)
  3. 众邮快递的物流信息是怎么在电脑上批量查询的
  4. 因数据造假,奔驰、日产、保时捷被韩国环境部处以重罚
  5. 微信授权登录后,把获取的信息存储到本地数据库中(超详细有用)!
  6. LeetCode 881 救生艇
  7. python字符串查找位置_python中怎么返回指定查找字符的位置
  8. 产品设计过程中的沉没成本和禀赋效应
  9. 同步电路设计中CLOCK SKEW的分析
  10. 使用Sharepoint Designer 无法打开站点提示错误403 forbidden