题意:
     给了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 矩阵构造相关推荐

  1. 又见斐波那契数列(矩阵构造+矩阵快速幂)

    //补题~~~ 链接:https://ac.nowcoder.com/acm/problem/15666 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  2. HDU1757(矩阵快速幂+简单的矩阵构造)

    很简单的矩阵构造看似很麻烦,其实直接写就ok了. ⎡⎣⎢⎢⎢⎢f(n)f(n−1)....f(n−9)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢a100....0b0100c0010d0000e0000f00 ...

  3. 【MATLAB】矩阵操作 ( 矩阵构造 | 矩阵运算 )

    文章目录 一.矩阵构造 1.列举元素 2.顺序列举 3.矩阵重复设置 4.生成元素 1 矩阵 二.矩阵计算 1.矩阵相加 2.矩阵相减 3.矩阵相乘 4.矩阵对应相乘 5.矩阵相除 6.矩阵对应相除 ...

  4. Educational Codeforces Round 16 C. Magic Odd Square 矩阵构造

    传送门 文章目录 题意: 思路: 题意: 给你一个奇数nnn,让你构造一个n∗nn*nn∗n的矩阵,矩阵的每个位置依次填上[1,n∗n]之内的数[1,n*n]之内的数[1,n∗n]之内的数,满足每行. ...

  5. 【Fibonacci-PEG,LDPC】基于Fibonacci-PEG算法的LDPC码校验矩阵的构造

    1.软件版本 matlab2021a 2.本算法理论知识 针对上述问题,本文将提出一种新型的基于Fibonacci-PEG算法的LDPC码校验矩阵的构造方法,该算法的基本流程如下图所示: 图1基于Fi ...

  6. matlab入门(三)——矩阵的构造与四则运算、基本程序结构

    文章目录 一.矩阵构造与操作 二.矩阵的四则运算 三.矩阵的下标 四.程序结构 视频课程:https://www.bilibili.com/video/BV13D4y1Q7RS?p=3&spm ...

  7. 【从零学习OpenCV 4】Mat类构造与赋值

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  8. 【Scala-spark.mlib】稠密矩阵和稀疏矩阵的创建及操作

    mlib中的稠密矩阵和稀疏矩阵 1.矩阵  1.1. mlib中的矩阵特质(Matrix)  1.1. Matrix定义的基本方法 2. 稠密矩阵  1.1. mlib中的稠密矩阵(DenseMatr ...

  9. numpy向量转换为矩阵_干掉公式——numpy 就该这么学

    机器学习和数据分析变得越来越重要,但在学习和实践过程中,常常因为不知道怎么用程序实现各种数学公式而感到苦恼,今天我们从数学公式的角度上了解下,用 python 实现的方式方法. 友情提示:不要被公式吓 ...

最新文章

  1. python的flask框架显示柱状图_使用Python的Flask框架,结合Highchart,动态渲染图表(Ajax 请求数据接口)...
  2. sublime text 安装Package Control
  3. 8-spark学习笔记-sparksql
  4. 小瓜牛漫谈 — String、StringBuffer、StringBuilder
  5. STM32 keil中编译遇到的问题
  6. 编程从业五年的十四条经验,句句朴实
  7. 一、express 路由 todos案例
  8. 第一个Verilog程序
  9. 为什么要用 SpringMVC 的 SessionStatus
  10. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️
  11. php json 小红点,关于PHP的json_encode的一个小技巧
  12. android横向铺满屏幕,解决安卓自定义Dialog不能水平铺满屏幕
  13. develop note 1
  14. 2016-05-06
  15. java高级教程pdf_《Java高级编程实用教程》PDF 下载_IT教程网
  16. 大脑网络结构、功能和控制的物理学
  17. 暴雪正在等待另一项_守望先锋更新一直显示正在等待另一项安装或更新怎么办...
  18. Netbeans使用问题整理
  19. pytorch骚操作之梯度累加,变相增大batch size
  20. 毕业后第二份工作:进军外企 赴新加坡工作 月薪18K

热门文章

  1. 三目运算符 改变a标签的class属性
  2. mysql function 与 procedure
  3. Java HashMap遍历的两种方式
  4. Revit二次开发之“使用ElementTransformUtils.MoveElement()移动元素”
  5. 日子过得真快,转眼就工作了4个月了
  6. “MIDI机器狗”的木马正在疯狂传播
  7. requireJS的基本使用
  8. 用番茄工作法提升工作效率 (三)工作任务的管理(系列完结篇)
  9. 表迁移工具的选型-复制ibd的方法-传输表空间
  10. SQL Server会话KILL不掉,一直处于KILLED /ROLLBACK状态情形浅析