hdu2276 矩阵构造
题意:
给了n个灯泡的状态,他们绕成一个环,0是灭,1是亮,每一秒灯泡的状态都会改变,规则是如果当前这个灯泡的左边的灯泡当前是状态1,那么下一秒当前的这个灯泡状态就改变0变1,1变0,最后问你m秒后的状态。
思路:
我们先找当前状态和下一个状态的关系(状态也就是秒),我们可以抽象成这么一种关系,如果第i个灯泡的状态是ai,那么下一秒的第i个灯泡的状态是上一秒的(ai + ai-1)%2,这样关系就出来了,我们构造矩阵,现在就以n=5为例:
上一秒 下一秒
a1 a2 a3 a4 a5 1 1 0 0 0 a1 a2 a3 a4 a5
0 1 1 0 0
* 0 0 1 1 0
0 0 0 1 1
1 0 0 0 1
ok然后就矩阵快速幂了,还有提示下,矩阵是不满足交换律的,也就是说如果把5*5的矩阵放在前面,然后* 初始矩阵=下一个状态,这样构造出来的矩阵会和上面不同,但两个都是对的,最后乘出来的答案一样(只要别吧各自的顺序弄错了)。
#include<stdio.h> #include<string.h> typedef struct {int mat[105][105]; }A;A mat_mat(A a ,A b ,int n) {A c;memset(c.mat ,0 ,sizeof(c.mat));for(int k = 1 ;k <= n ;k ++)for(int i = 1 ;i <= n ;i ++)if(a.mat[i][k])for(int j = 1 ;j <= n ;j ++)c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % 2;return c; }A Quick_mat(A a ,int b ,int n) {A c;memset(c.mat ,0 ,sizeof(c.mat));for(int i = 1 ;i <= n ;i ++)c.mat[i][i] = 1;while(b){if(b&1) c = mat_mat(c ,a ,n);a = mat_mat(a ,a ,n);b >>= 1;}return c; }int main () {int n ,i ,j ,m;int num[105];char str[105];A aa;while(~scanf("%d" ,&m)){scanf("%s" ,str);n = strlen(str);for(i = 1 ;i <= n ;i ++)num[i] = str[i-1] - '0';memset(aa.mat ,0 ,sizeof(aa.mat));aa.mat[1][1] = aa.mat[n][1] = 1;for(i = 2 ;i <= n ;i ++)aa.mat[i-1][i] = aa.mat[i][i] = 1;aa = Quick_mat(aa ,m ,n);for(i = 1 ;i <= n ;i ++){int now = 0;for(j = 1 ;j <= n ;j ++)now = (now + num[j] * aa.mat[j][i]) % 2;printf("%d" ,now);}puts("");}return 0; }
hdu2276 矩阵构造相关推荐
- 又见斐波那契数列(矩阵构造+矩阵快速幂)
//补题~~~ 链接:https://ac.nowcoder.com/acm/problem/15666 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...
- HDU1757(矩阵快速幂+简单的矩阵构造)
很简单的矩阵构造看似很麻烦,其实直接写就ok了. ⎡⎣⎢⎢⎢⎢f(n)f(n−1)....f(n−9)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢a100....0b0100c0010d0000e0000f00 ...
- 【MATLAB】矩阵操作 ( 矩阵构造 | 矩阵运算 )
文章目录 一.矩阵构造 1.列举元素 2.顺序列举 3.矩阵重复设置 4.生成元素 1 矩阵 二.矩阵计算 1.矩阵相加 2.矩阵相减 3.矩阵相乘 4.矩阵对应相乘 5.矩阵相除 6.矩阵对应相除 ...
- Educational Codeforces Round 16 C. Magic Odd Square 矩阵构造
传送门 文章目录 题意: 思路: 题意: 给你一个奇数nnn,让你构造一个n∗nn*nn∗n的矩阵,矩阵的每个位置依次填上[1,n∗n]之内的数[1,n*n]之内的数[1,n∗n]之内的数,满足每行. ...
- 【Fibonacci-PEG,LDPC】基于Fibonacci-PEG算法的LDPC码校验矩阵的构造
1.软件版本 matlab2021a 2.本算法理论知识 针对上述问题,本文将提出一种新型的基于Fibonacci-PEG算法的LDPC码校验矩阵的构造方法,该算法的基本流程如下图所示: 图1基于Fi ...
- matlab入门(三)——矩阵的构造与四则运算、基本程序结构
文章目录 一.矩阵构造与操作 二.矩阵的四则运算 三.矩阵的下标 四.程序结构 视频课程:https://www.bilibili.com/video/BV13D4y1Q7RS?p=3&spm ...
- 【从零学习OpenCV 4】Mat类构造与赋值
本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...
- 【Scala-spark.mlib】稠密矩阵和稀疏矩阵的创建及操作
mlib中的稠密矩阵和稀疏矩阵 1.矩阵 1.1. mlib中的矩阵特质(Matrix) 1.1. Matrix定义的基本方法 2. 稠密矩阵 1.1. mlib中的稠密矩阵(DenseMatr ...
- numpy向量转换为矩阵_干掉公式——numpy 就该这么学
机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用 python 实现的方式方法. 友情提示:不要被公式吓 ...
最新文章
- python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)...
- sublime text 安装Package Control
- 8-spark学习笔记-sparksql
- 小瓜牛漫谈 — String、StringBuffer、StringBuilder
- STM32 keil中编译遇到的问题
- 编程从业五年的十四条经验,句句朴实
- 一、express 路由 todos案例
- 第一个Verilog程序
- 为什么要用 SpringMVC 的 SessionStatus
- ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️
- php json 小红点,关于PHP的json_encode的一个小技巧
- android横向铺满屏幕,解决安卓自定义Dialog不能水平铺满屏幕
- develop note 1
- 2016-05-06
- java高级教程pdf_《Java高级编程实用教程》PDF 下载_IT教程网
- 大脑网络结构、功能和控制的物理学
- 暴雪正在等待另一项_守望先锋更新一直显示正在等待另一项安装或更新怎么办...
- Netbeans使用问题整理
- pytorch骚操作之梯度累加,变相增大batch size
- 毕业后第二份工作:进军外企 赴新加坡工作 月薪18K
热门文章
- 三目运算符 改变a标签的class属性
- mysql function 与 procedure
- Java HashMap遍历的两种方式
- Revit二次开发之“使用ElementTransformUtils.MoveElement()移动元素”
- 日子过得真快,转眼就工作了4个月了
- “MIDI机器狗”的木马正在疯狂传播
- requireJS的基本使用
- 用番茄工作法提升工作效率 (三)工作任务的管理(系列完结篇)
- 表迁移工具的选型-复制ibd的方法-传输表空间
- SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析