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 矩阵构造的更多相关文章
- ZOJ 3212 K-Nice(满足某个要求的矩阵构造)
H - K-Nice Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Sta ...
- HDU 2243 ( Trie图 矩阵构造幂和 )
题意 : 长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义. 比如一共有2个词根 aa 和 ab ,则可能存在104个长度不超过3的单词, ...
- HDU 2243 考研路茫茫——单词情结 ( Trie图 && DP && 矩阵构造幂和 )
题意 : 长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义. 比如一共有2个词根 aa 和 ab ,则可能存在104个长度不超过3的单词, ...
- HDU3306-Another kind of Fibonacci(矩阵构造)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- HDU 2276 Kiki & Little Kiki 2 矩阵构造
Kiki & Little Kiki 2 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU2256-Problem of Precision(矩阵构造+高速幂)
pid=2256">题目链接 题意:求sqrt(sqrt(2) + sqrt(3)) ^ 2n MOD 1024 思路: 代码: #include <iostream> # ...
- HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过
A Simple Math Problem 一个矩阵快速幂水题,关键在于如何构造矩阵.做过一些很裸的矩阵快速幂,比如斐波那契的变形,这个题就类似那种构造.比赛的时候手残把矩阵相乘的一个j写成了i,调试 ...
- 2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )
题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' .'B' .'C' } 构造出长度为 n 且不包含 AAA.BBB CCC.ACB BCA.CAC CBC ...
- 关于 矩阵在ACM中的应用
关于矩阵在ACM中的应用 1.矩阵运算法则 重点说说矩阵与矩阵的乘法,不说加减法. 支持: 结合律 (AB)C = A(BC) 分配律 A(B+C) = AB + AB $\left( \lambd ...
随机推荐
- APICloud Avm.js跨端框架的优势
AVM(Application-View-Model)是APICloud推出的一个跨端的高性能 JavaScript框架,更趋近于原生的编程体验,它提供简洁的模型来分离应用的用户界面.业务逻辑和数据模 ...
- day1_安装及建立数据库和表
#第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...
- 元数据管理—动态表单设计器在crudapi系统中完整实现
表单设计 在前面文章中,我们通过一系列案例介绍了表单设计的一些基本功能,表单设计起到非常重要作用,也是crudapi核心,所以本文会详细介绍表单设计中一些其它功能. 概要 表单字段column属性 列 ...
- SnowNLP——获取关键词(keywords(1))
一.SnowNLP的获取文本关键词 前面介绍了SnowNLP的获取关键词的方法,这里再重现一下 1 from snownlp import SnowNLP 2 # 提取文本关键词,总结3个关键词 3 ...
- js 数组的浅拷贝和深拷贝
1.背景介绍 javascript分原始类型与引用类型.Array是引用类型,直接用"="号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,指向的是同一个内存地址,其中一个 ...
- 如何报告FreeBSD 的bug?
https://bugs.freebsd.org/bugzilla/ 注册个账号即可,请使用英语,把程序在不同程序上的运行结果列出来即可- 注意标记架构,如果有log还请一并附上,英语差可以 ...
- Andrew BP 神经网络详细推导
Lec 4 BP神经网络详细推导 本篇博客主要记录一下Coursera上Andrew机器学习BP神经网络的前向传播算法和反向传播算法的具体过程及其详细推导.方便后面手撸一个BP神经网络. 目录 Lec ...
- Intellij IDEA maven设置tomcat
1 pom.xml配置插件 <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId&g ...
- P2261 [CQOI2007]余数求和 【整除分块】
一.题面 P2261 [CQOI2007]余数求和 二.分析 参考文章:click here 对于整除分块,最重要的是弄清楚怎样求的分得的每个块的范围. 假设$ n = 10 ,k = 5 $ $$ ...
- Java 并发工具类 CountDownLatch、CyclicBarrier、Semaphore、Exchanger
本文部分摘自<Java 并发编程的艺术> CountDownLatch CountDownLatch 允许一个或多个线程等待其他线程完成操作.假设现有一个需求:我们需要解析一个 Excel ...